C# 具有附加参数的Linq Group By Into
我有以下sql结果: 表格结果 目标是按Projected和SequenceId对该结果进行分组。稍后的JSON结果应该如下所示:C# 具有附加参数的Linq Group By Into,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有以下sql结果: 表格结果 目标是按Projected和SequenceId对该结果进行分组。稍后的JSON结果应该如下所示: [ { "ProjectId": 1, "ProjectName": "Testprojekt 1", "Sequences": [ { "SequenceId": 2, "SequenceName": "ESN_Tauschen" }, { "Se
[
{
"ProjectId": 1,
"ProjectName": "Testprojekt 1",
"Sequences": [
{
"SequenceId": 2,
"SequenceName": "ESN_Tauschen"
},
{
"SequenceId": 3,
"SequenceName": "Demontage"
}
]
},
{
"ProjectId": 2,
"ProjectName": "Testprojekt 2",
"Sequences": [
{
"SequenceId": 3,
"SequenceName": "Demontage"
}
]
}
]
group new { p, s } by p.ProjectId into g
let p = g.FirstOrDefault().p
select new
{
ProjectId = g.Key,
ProjectName = p.Name,
Sequences =
(from e in g
group e.s by e.s.SequenceId into g2
let s = g2.FirstOrDefault()
select new
{
SequenceId = g2.Key,
SequenceName = s.Name
}).ToList()
};
我当前的linq表达式给出以下结果:
[
{
"ProjectId": 1,
"Sequences": [
2,
3
]
},
{
"ProjectId": 2,
"Sequences": [
3
]
}
]
var context = new ReworkPlace();
var result = from p in context.Projects
join rs in context.ReworkStations on p.ProjectId equals rs.ProjectId
join l in context.ReworkStationReworkConfigurationLinkSets on rs.ReworkStationId equals
l.ReworkStationId
join rc in context.ReworkConfigurations on l.ReworkConfigurationId equals rc.ReworkConfigurationId
join s in context.Sequences on rc.SequenceId equals s.SequenceId
group s.SequenceId by p.ProjectId into g
select new
{
ProjectId = g.Key,
Sequences = g.ToList()
};
return Json(result, JsonRequestBehavior.AllowGet);
我不知道如何调整linq表达式以将未分组属性如ProjectName、SequenceId和SequenceName包含到json结果中
如果有人能帮助我,那就太好了。要在不完全重写查询的情况下获得所需的结果,请替换分组部分:
group s.SequenceId by p.ProjectId into g
select new
{
ProjectId = g.Key,
Sequences = g.ToList()
};
比如说:
[
{
"ProjectId": 1,
"ProjectName": "Testprojekt 1",
"Sequences": [
{
"SequenceId": 2,
"SequenceName": "ESN_Tauschen"
},
{
"SequenceId": 3,
"SequenceName": "Demontage"
}
]
},
{
"ProjectId": 2,
"ProjectName": "Testprojekt 2",
"Sequences": [
{
"SequenceId": 3,
"SequenceName": "Demontage"
}
]
}
]
group new { p, s } by p.ProjectId into g
let p = g.FirstOrDefault().p
select new
{
ProjectId = g.Key,
ProjectName = p.Name,
Sequences =
(from e in g
group e.s by e.s.SequenceId into g2
let s = g2.FirstOrDefault()
select new
{
SequenceId = g2.Key,
SequenceName = s.Name
}).ToList()
};
诀窍是在group
和by
之间包含分组中所需的数据(除了键
,该键是在by
之后添加的)
若要获取其他字段,可以将它们包括在分组键中,或者如果它们与定义的分组键相同,使用
FirstOrDefault
从分组中的第一条记录中获取它们,如上例所示。如果使用导航属性而不是加入,我认为您完全可以不使用组。
。非常感谢伊万,您救了我一天:-)这正是您提到的工作方式!