C# 按LINQ分组与按SQL分组

C# 按LINQ分组与按SQL分组,c#,sql,linq,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.Bra

我有以下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,
    };

但是SQL中的结果返回88行(aim),查询语法中返回78行,LINQ 270中返回总数

我希望的LINQ语句返回88行。

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


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

你为什么要使用groupby;如果您只对键感兴趣,而不是对属于该键的聚合项感兴趣?您不使用
Distinct
而不是
GroupBy
有什么原因吗?(在SQL和代码中)数据是否在数据库中?如果是这样的话,那么使用sql并将获取卸载到db服务器有什么问题?如果仅仅因为想使用linq而将所有数据加载到内存中,这是一个非常糟糕的主意。@Rob假设
文档
是一个
/
DbSet
或类似内容:它不加载“所有数据”-它加载所有唯一的组合-尽管我同意Flater的观点,如果没有聚合,Distinct会更“明显”@你是对的,Marc什么时候做了更改,并查看了它被翻译成Distinct的实际SQL。没有理由分组,感谢您指出这一点。感谢您的快速回复。当查看实际发出的SQL查询时,这确实被转换为distinct。
var docs = documents
    .GroupBy(d => new Group
    {
        Area = d.Area,
        Brand = d.Brand,
        MilestoneId = d.MilestoneId,
        DocumentCategoryId = d.DocumentCategoryId,
    })
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,
    });