2012-03-13 5 views
0

나는 Person 엔티티를 가지고있다. 사람은 많은 기록에 의해 집단을가집니다.LINQ to this message exception :`get_Item (Int32)`

public class Person() 
{ 
    virtual public IList<Record> Records {get; set;} 
} 

public class Record() 
{ 
    virtual public int Number {get; set;} 
} 

나는 NHibernate에 의해 LINQ 쿼리가 있습니다. Domain.Entities.Record get_Item(Int32)

이유 :

var q = SessionInstance.Query<Person>() 
     .Where(x => x.Records.Any() && x.Records[0].Number>= 5); 
q.ToList<Person>() 

은이 메시지의 예외에 의해 런타임 오류가 무엇입니까?

답변

0

컬렉션 (0부터 시작하는 컬렉션)에서 첫 번째 요소를 가져 오려고합니다. collection가 null의 경우, 또는 예외를 슬로우하는 요소가없는 경우.

var q = SessionInstance.Query<Person>().Where(x => x.Records.Any() && x.Records.FirstOrDefault().Number>= 5); 
q.ToList<Person>() 

가 희망하는 것이 도움이

변화.

는 작동하지만 논리가 정확한지 확인하시기 바랍니다 것입니다

업데이트되었습니다.

var q = SessionInstance.Query<Person>().Where(x => x.Records.Any(r => r.Number >= 5)); 
+0

다른 예외가 있습니다. 새 메시지 예외는 'Antlr.Runtime.NoViableAltException'유형의 예외가 발생했습니다. [Domain.Entities.Person] (NHibernate.Linq.NhQueryable'1 [Domain.Entities.Person], Quote ((x,) => (AndAlso (Domain.Entities.Record) (x.Records), GreaterThanOrEqual (.FirstOrDefault [Domain.Entities.Record] (x.Records,) .VolunteerFront, p1))),)] – Ehsan

+0

이 쿼리를 시도하십시오. var q = SessionInstance.Query () .Where (x => x.Records.Any (r => r.Number> = 5)); –

+0

하지만 Person.Records.Number> = 5 인 컬렉션에서 Person을 반환합니다. 쿼리의 첫 번째 항목 만 확인하는 이유가 있습니까? –

0

귀하의 예외 메시지는 불완전하지만 문제가 수집 인덱서 (get_Item()) 방식 지원이 구현되지 않은 단지 것을 믿습니다.

내가, 문제를 열고, 단지 더 나은 아직, 구현 및 발전기를 등록하거나, DictionaryGenerator.cs

당신은 이것에 대한 Jira issue을 열 수 있습니다 체크 아웃 REPO 포크 IDictionary<,>을 위해 매우 비슷한 조각을 썼다 구현 기능을 선택하고 끌어 오기 요청을 보냅니다.