2016-06-02 6 views
2

をカウントし、合計:一緒にラムダ式を使用してLINQ to SQLは入会、GROUPBY、私は私が欲しいものを得るために、このSQL文を使用

select count(o.Id) as order_amount, sum(r.Price) as Total_ordersum from Orders o join OrderRows r on o.Id = r.OrderId; 

私は同じ結果を得るためのLINQラムダ式を使用して、これを試してみました

Orders 
     .Join(OrderRows, o => o.Id, r => r.OrderId, (o,r) => new {o,r}) 
     .GroupBy(g => new {g.o.Id, g.r.Price}) 
     .Select(group => new { 
      order_amount = group.Count(), 
      Total_ordersum = group.Key.Price, 
     });´ 

しかし、私は合計注文金額とすべての注文の合計で1つではなく3行を取得します。私はここで間違って何をしていますか?

答えて

2

私はここで間違っていますか?

LINQクエリとSQLクエリは同等ではありません。あなたのSQLクエリはGROUP BYを持たず、LINQクエリはグループIdとレコードPriceをグループ化しますが、もちろん結果は異なります。また、SQLクエリは、レコードPriceを集計しますが、LINQクエリはレコードを集計しません。

あなたは珍しいgroup by定数オペレータの並べ替えを使用してLINQで同じ結果を得ることができます。

var query = Orders 
    .Join(OrderRows, o => o.Id, r => r.OrderId, (o, r) => new { o, r }) 
    .GroupBy(g => 0) // any constant would work 
    .Select(g => new 
    { 
     order_amount = g.Count(), 
     Total_ordersum = g.Sum(e => e.r.Price), 
    }); 
+0

おかげイヴァンを!しかし、GroupBy(g => 0)というところはどういう意味ですか?ラムダ式で宣言された変数を使うはずがありませんか? –

+0

@HabilKantur実際にはありません。 '_'を使用して、' GroupBy(_ => 0) 'のような未使用のラムダパラメータを示す人もいます。 –

+0

もう一度ありがとう!感謝します。 –

関連する問題