0

以下のコードを見て、顧客 ID 列の横に売上列と領収書列の合計を持つ顧客 ID でクエリ結果を要約/グループ化したいと思います。

var sales = from s in context.Sales
            select new { id = s.CustomerID, sales = s.Amount, receipts = (decimal)0 };

var receipts = from r in context.Receipts
            select new { id = r.CustomerID, sales = (decimal)0, receipts = r.Amount };

var summary = sales.Union(receipts).ToList();

私はいくつかの組み合わせを使用して同じことを達成しようとしました:

var summary = sales.Union(receipts).GroupBy(e=>e.id).Select( ... )

...しかし、役に立たない。

関連する正しい構文を取得することを楽しみにしています。

4

2 に答える 2

0

これを試して

    var salesAndreceipts = from data in context.Receipts
                               join data2 in context.Receipts on data.CustomerID on data2.CustomerID
                               select new { id = r.CustomerID, sales = data.Sales, receipts = data2.Amount };

更新 上記の代わりに、売上と領収書からデータを取得した後、以下を試してください。

      var salesAndReceipts = sales.Union(receipts).ToList(); 


        var groupedData = from data in salesAndreceipts
                          group data by new {id=data.CustomerID}
                              into SalesRecepientGroup
                              Select new
                              {
                                  id = SalesRecepientGroup.Key.CustomerID,
                                  sales = SalesRecepientGroup.Sum(x=>x.Sales),
                                  receipts = SalesRecepientGroup.Sum(x=>x.Amount)

                              };

お役に立てれば.. :)

アップデート

次に、EFProfiler で生成されているクエリを確認し、これらを最適化できます。

于 2012-11-18T17:33:29.683 に答える
0

内容を推測する必要がありますが、あなたは近かったですSelect( ... )。あなたはこれを行うことができます:

summary
    .GroupBy(s => s.id)
    .Select(g => new { id = g.Key,
                       salesSum = g.Sum(x => x.sales), 
                       receiptsSum = g.Sum(x => x.receipts)
                     })
于 2012-11-18T23:19:51.313 に答える