我在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行。
答案 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吗?这应该告诉你它的不同之处。