C# 按LINQ分组与按SQL分组
我有以下SQL查询,我想将其转换为LINQ语句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
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,
});