0

次のLINQステートメントがあります。

var query =(from item in _itemRepository.FindAll()
            where item.Id == "20649458"
                from singelitem in item.ListOfChildren
                where singelitem.Property == "singelitem"
                from manyitems in item.ListOfChildren
                where manyitems.Property == "many"
                select new
                            {
                                item.Id,
                                singelitem,
                                manyitems 
                            });
var result = query.ToList();

Tasksはオブジェクトのコレクションであり、where句tasks.Property == "something"はコレクション内のいくつかのアイテムと一致しますが、selectで匿名タイプを使用すると、Tasksのコレクションではなく、一致する結果の1つのアイテム(最初のアイテム)のみが返されます。コレクション内の一致するすべてのタスクを取り戻すにはどうすればよいですか?

編集:実際に起こったことは、フラットオブジェクトを取得することです(結合ステートメントからのdb結果セットのように)。

4

2 に答える 2

3

匿名タイプを使用しない場合は、アクセス時にタスクを遅延ロードするエンティティクラスを処理します。結果を使用してタスクをロードする場合は、Includeメソッドを使用して子をロードしてみてください。ReferenceプロパティまたはLoad()を呼び出す代わりに、子オブジェクトを直接ロードするLINQtoEntitiesクエリを作成する方法を参照してください。

于 2012-06-04T14:53:31.150 に答える
0

これはLinqの適切な動作です。実際、あなたが期待していることは不可能です。item.Id=="123";に一致する単一のアイテムを期待しています。そして、複数の場合はどうなりますか?一致したアイテムごとに匿名アイテムを作成するだけです。最初の「from」ステートメントを2番目のステートメントに変更することを考えてみてください。あなたは何を期待しますか?

また、最初の「from」ステートメントと2番目のステートメントの間に関係がないため、このクエリは少し「奇妙」になります。クエリを2つに分割してみませんか。目的のプロパティで新しいオブジェクトを作成しますか?

于 2012-06-04T14:59:18.907 に答える