2016-11-02 5 views
0

質問asked here上の拡張へのLINQで個別に選択して、私はコメントで、それはそれはLINQのであれば、これは動作しませんことを示唆した。すなわちエンティティ

IEnumerable<Customer> filteredList = originalList 
    .GroupBy(customer => customer.CustomerId) 
    .Select(group => group.First()); 

、同じ機能を実行しようとしていエンティティには、確かに私のために働いていない、私はnullの結果セットを取得します。

私のためには機能しません!私も 'FirstOrDefault'を試しても動作しませんでした。 - JatSing 9月25日11時13分55秒

@ JatSing:Linq to Entitiesを使用している必要があります。 - だから、14時45分

でジョシュMouch 2月14日'12上記は、エンティティへのLINQのために動作しませんどのように私は2つの列で設定されたEntityTypeメッセージのIEnumerableををグループ化については行くだろうし、次に取得する場合各グループの最初の行?

+0

"null result set"によって、filteredListが値を持たないIEnumerableであるか、 'filteredList'が文字通り' null'ですか?それが前者の場合、 'originalList'に内容があることを確かめますか? – UtopiaLtd

+0

値なしのIEnumerableは、元のリストに期待される内容があります – ItinerantEngineer

+1

おそらく理想的ではありませんが、 '.GroupBy(...)'の前に '.ToList()'を呼び出した場合はどうなりますか? – UtopiaLtd

答えて

0

Entity Frameworkなどを使用してLINQ式を評価する方法に問題がある場合は、.ToList()を呼び出して、クエリをさらに処理するためにメモリに実装することができます。これは、データベースや他のソースからの結果が非常に高価でフェッチされ、さらに先に絞り込むことができれば理想的ではありません。

IEnumerable<Customer> filteredList = originalList 
    .ToList() 
    .GroupBy(customer => customer.CustomerId) 
    .Select(group => group.First()); 

.ToList()コールは、Entity Frameworkは.GroupBy(...)originalListではなく、一部での完全な結果のオフメモリに評価できるようにすること、(私はある種のIQueryable<T>であると仮定)データベースからフルoriginalListをロードしますSQLクエリEFの作成

+0

'.FirstOrDefault()'は上のコメントで述べたように、 Entity Frameworkの新しいバージョンでは、 '.ToList()'を最初に呼び出す場合は '.First()'が適切です。なぜなら、この時点では1つ未満の有効なグループ化がないからです。 – UtopiaLtd

+0

グループ化のためにLINQ to Objectsを使用したら、 'ToList'ではなくコンテキストを切り替えるために' AsEnumerable'を使うのが良いでしょう。 –

関連する問題