0

EntityObject が与えられた場合、オブジェクト指向の方法で、関連するすべてのアイテムをデータ ソース クエリの一部として見つけたいと考えています。

以下は正しい出力を生成しますが、それを行うためにすべての行をワイヤ上に移動します。

Parent.                                             // EntityObject
Children.                                           // EntityCollection
Where(o => o.Gender == 'm').                        // IEnumerable (local!)
OrderBy(o => o.Age).                                // IOrderedEnumerable
Skip(pages * pageSize).Take(pageSize);              // (Inefficient paging!)

これでUIをサポートする必要があります(ネットワーク経由で結果を返す前に、他の基準を使用してフィルタリングし、ソートし、ページネーションします)。Queryable を利用するように並べ替えました。

Repository.                                         // Repository
Children.                                           // ObjectSet
Where(o => o.Parent == Parent && o.Gender == 'm').  // ObjectQuery, runtime error
OrderBy(o => o.Age).                                // IOrderedQueryable
Skip(pages * pageSize).Take(pageSize);

しかし、これはエラーを引き起こします:

タイプ 'DataModel.Parent' の定数値を作成できません。このコンテキストでは、プリミティブ型 (Int32、String、および Guid など) のみがサポートされます。

Linq to Entities を使用して、この関係をクエリする自然なオブジェクト指向の方法はありますか? それとも、このために SQL にフォールバックする必要がありますか?

一瞬、CreateSourceQueryが答えになるのではないかと思いましたが、EntityObject には適用できません。

4

1 に答える 1

1

私が言っていることをテストすることはできませんが、EFがo.Parent == ParentをSQLステートメントに変換する方法を知らないため、エラーが発生すると思います。2人の親のIDを比較してみてください。 o.Parent.Id == Parent.Id

于 2012-08-11T12:48:24.227 に答える