2016-02-13 5 views
6

私はエンティティフレームワークを使用しており、テーブルを介してグループを実行しています。私のクエリは次のです: - 私はPaymentDetailが、含まれているLinqグループ内部エンティティを取らないことによって

var brokerPaymentLists = dbContext.BrokerPayments 
    .Include("PaymentDetail") 
    .Where(bp => bp.IdPaymentStatus == (long)EntityModel.Additions.Variables.PaymentStatus.ALLOTED) 
    .GroupBy(bp => bp.IdBroker, 
    (key, g) => new 
    { 
     IdBroker = key.Value, 
     BrokerPayments = g.ToList() 
    }).ToList(); 

見ることができるiでグループ化した後、私はヌルBrokerPayments内の各アイテムのpaymentdetailいます。なぜこのようなことが起こっているのか、どのようにして私が支払うことができるようなグループを行うことができるのか、どのブローカー決済についても責任を負いません。

+0

をdefferdされないことに注意を払う:

var brokerPaymentLists = dbContext.BrokerPayments .Include("PaymentDetail") .Where(bp => bp.IdPaymentStatus == (long)EntityModel.Additions.Variables.PaymentStatus.ALLOTED) .AsEnumerable() .GroupBy(bp => bp.IdBroker, (key, g) => new { IdBroker = key.Value, BrokerPayments = g }); 

注:あなたのようなオブジェクトにLINQでグループ化を実行することができます回避策として

2008年に書かれたので、古いかもしれません:http://wildermuth.com/2008/12/28/Caution_when_Eager_Loading_in_the_Entity_Framework – devuxer

答えて

1

Includeを使用して熱心に読み込む場合は、Includeが適用されてから変更しないデータの形状が必要です。あなたの場合、これはクエリがIQueryable<BrokerPayments>を返す必要があることを意味します。しかし、を返すので、GroupByオペレータはシェイプを変更します。投影とカスタム結合でも同じことが起こります。私はそれが、役立つかもしれないブログの記事を見つけたクエリexectuionが

+0

少なくとも、Linqからオブジェクトへの変換を試みるときには、ToList()を使わないでください。 'AsEnumerable()'を使います。 –

+0

@ジェフあなたは完全に正しいです。私は自分の答えを修正した。 – Kalitsov

関連する問題