由LINQ vs group by SQL分组

时间:2017-12-08 10:16:40

标签: c# sql linq

我在SQL中有以下查询,我想将其转换为LINQ语句。

select AreaId, BrandId, MilestoneId, DocumentCategoryId
from Document
group by AreaId, Brandid, MilestoneId, DocumentCategoryId

我试过,例如,

var docs =
    from d in documents
    group d by new
    {
        d.Area,
        d.Brand,
        d.MilestoneId,
        d.DocumentCategoryId
    } into gcs
    select new Group()
    {
        Area = gcs.Key.Area,
        Brand = gcs.Key.Brand,
        MilestoneId = gcs.Key.MilestoneId,
        DocumentCategoryId = gcs.Key.DocumentCategoryId,
    };

var docs = documents
    .GroupBy(d => new Group
    {
        Area = d.Area,
        Brand = d.Brand,
        MilestoneId = d.MilestoneId,
        DocumentCategoryId = d.DocumentCategoryId,
    })

但SQL中的结果返回88行(目标),查询语法为78行,LINQ 270(总数)。

我想要一个LINQ语句来返回88行。

1 个答案:

答案 0 :(得分:1)

我希望最终版本实际上是切换到LINQ到对象 - 即每行填充Group 对象,然后用.NET术语分组,这将意味着每组一行,因为我怀疑你的Group实现了正确的平等模式。要让LINQ正确处理最后一个版本,你可能需要在混合中添加一个匿名类型(LINQ理解这应该像一个元组):

var docs = documents
    .GroupBy(d => new
    {
        Area = d.Area,
        Brand = d.Brand,
        MilestoneId = d.MilestoneId,
        DocumentCategoryId = d.DocumentCategoryId,
    }).Select(grp => new Group {
        Area = grp.Key.Area,
        Brand = grp.Key.Brand,
        MilestoneId = grp.Key.MilestoneId,
        DocumentCategoryId = grp.Key.DocumentCategoryId,
    });

至于88 vs 78:你看过发布的是什么SQL吗?这应该告诉你它的不同之处。