SQL GROUP BY语句的LINQ等效查询将是什么?

时间:2020-06-15 08:45:59

标签: c# linq tsql

我有一个带有GROUP BY的TSQL语句。我想知道C#中与此等效的LINQ和lambda表达式。

SELECT ProductId, SUM(QTY)
From Test 
Group BY ProductId
Order BY SUM(QTY) DESC

1 个答案:

答案 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);
        }
    }
}
相关问题