2012-03-13 7 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クエリを持っています。

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

それは、このメッセージの例外により、実行時エラーです:Domain.Entities.Record get_Item(Int32)

なぜ?

答えて

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())メソッドのサポートが実装されていないだけということであると信じています。

私はあなただけを実装し、登録あなたの発電機を、または、いっそのこと、問題を開いて、レポをフォーク、実装し、このためJira issueを開くことができますいずれかDictionaryGenerator.cs

をチェックアウトし、IDictionary<,>のための非常によく似た作品を書きましたこの機能を使用してプルリクエストを送信します。

関連する問題