【发布时间】:2016-11-14 12:05:10
【问题描述】:
我的场景如下:
我有以下数据 -
ID、名称、类型、位置、GroupID
1, samename, Rock, New York, 12
2, samename, Jazz, Sydney, 12
3, samename, Rock, Sydney, 12
4, samename, Jazz, New York, 12
5, name3, Opera House, Sydney, 14
6, name3, Opera House, London, 14
7, name2, Emirates, London, 13
我想根据下面的 GroupID 将其展平
ID、姓名、地点、位置、GroupID
1, samename, {Rock,Jazz}, {New York,Sydney}, 12
5, name3, Opera House, {Sydney,London}, 14
7, name2, Emirates, London, 13
这是我继承的非常糟糕的设计 - 我正在努力使它变得更好......而不破坏旧代码。
我相信答案与 SelectMany 有关 - 但我无法确定语法 - 我尝试了几种不同的方法。
我尝试的解决方案 - 没有扁平化..
var q3 = Data.Where(b=>b.GroupID != null).GroupBy(x=> new { x.GroupID }, (key, group) => new
{
GroupID = key.GroupID,
Result = group.Select(g=> new
{
Type = g.Type,
Location = g.Location,
}).ToList()
});
【问题讨论】:
-
你正试图做与扁平化相反的事情。
-
您做了什么?在任何情况下,您发布的内容都不是“扁平化”,您是按名称分组然后应用各种聚合,例如 ID 的最小值,位置、位置的扁平化,GroupID 的最小值
-
一个简单的循环与字典名称可能是最简单和最清晰的方法
-
@ClaudioRedi 不是真的。你所说的“用字典循环”产生的正是
GroupBy或group by。然后呢? -
列表 {Rock,Jazz} 是否链接到 {New York,Sydney}?它将如何反映摇滚 - 纽约的存在,但如果有伦敦 - 爵士,但没有伦敦 - 摇滚 - 将如何表示,或者这两个列表只是简单的列表,它们之间没有联系?
标签: c# .net entity-framework linq linq-to-sql