我有一个清单
我的要求
如果条件满足其他不分组,我需要一个 LINQ lambda 查询来分组到列表。
即在我希望它被分组的条件下,
否则它不应该被分组
我在网上搜索过 - 我获得了有关按条件分组的详细信息,但我无法获得并了解如何在不分组的情况下包含剩余项目。
在网上找到的一些信息用于有条件地分组 - 但那些不符合条件的项目不包括在结果列表中。
例如
列表 = [{1,"a"},{40,""),{9,"a"},{52,"b"),{2,"b"},{99,""),{第88话
预期的结果列表将按 a,b 分组,但不应将 "" 分组
ResultantList = Group[0] ==> [{1,"a"}
{9,"a"}],
Group[1] ==>[ {52,"b"),
{2,"b"},
{88,"b"}] ,
// all other items which is "" should be included without groups
Group[3] [ {40,""}]
Group[4][ {99,""} ]
Run Code Online (Sandbox Code Playgroud)
我试过的
var resultantList = sigList
.GroupBy(s => s.SignalGroup)
.Select(grp => grp.ToList())
//.Where(g => !g.Any(grp => grp.SignalGroup == ""))
.ToList();
Run Code Online (Sandbox Code Playgroud)
以上如预期
取消注释 Where 子句仅将 a 和 b==> 包含在空值 ( "" ) 中的所有项目中
注释 Where 子句将 a、b 和 "" 字符串分组以制作一个包含 3 个组(a、b 和 "")的列表。
假设第一列类似于 unique Id:
var resultantList = sigList
.GroupBy(s => s.SignalGroup == "" ? s.Id.ToString() : s.SignalGroup)
.Select(grp => grp.ToList())
.ToList();
Run Code Online (Sandbox Code Playgroud)
所以 ifSignalGroup是一个空字符串,GroupBy它采用(唯一的)Id,在所有其他情况下是SignalGroup,所以你得到每个 Id 一组的期望结果 if SignalGroupis ""。
如果它不是唯一的,则Guid.NewGuid().ToString()用作组的键。