我有一个带有GROUP BY的TSQL语句。我想知道C#中与此等效的LINQ和lambda表达式。
SELECT ProductId, SUM(QTY)
From Test
Group BY ProductId
Order BY SUM(QTY) DESC
答案 0 :(得分:0)
LINQ等效查询将是:
var resultsLinq = from test in tests
group new { test.QTY } by test.ProductId into prdGroup
let qtySum = prdGroup.Sum(t => t.QTY)
orderby qtySum descending
select new { ProdyctId = prdGroup.Key, QtySum = qtySum };
和等效的lambda查询将是:
var resultsLamda = tests
.GroupBy(test => test.ProductId)
.Select(prdGroup => new { ProdyctId = prdGroup.Key, QtySum = prdGroup.Sum(t => t.QTY) })
.OrderByDescending(prdGroup => prdGroup.QtySum);
完整的代码示例:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
class Test
{
public int ProductId { get; set; }
public int QTY { get; set; }
}
class Program
{
static void Main()
{
IList<Test> tests = new List<Test>
{
new Test { ProductId = 1, QTY = 10 },
new Test { ProductId = 1, QTY = 20 },
new Test { ProductId = 1, QTY = 30 },
new Test { ProductId = 2, QTY = 40 },
new Test { ProductId = 2, QTY = 50 }
};
var resultsLinq = from test in tests
group new { test.QTY } by test.ProductId into prdGroup
let qtySum = prdGroup.Sum(t => t.QTY)
orderby qtySum descending
select new { ProdyctId = prdGroup.Key, QtySum = qtySum };
var resultsLamda = tests
.GroupBy(test => test.ProductId)
.Select(prdGroup => new { ProdyctId = prdGroup.Key, QtySum = prdGroup.Sum(t => t.QTY) })
.OrderByDescending(prdGroup => prdGroup.QtySum);
}
}
}