C# Linq to Group to a list if a Condition meet else do not group

jAn*_*oni 1 c# linq

我有一个清单
我的要求

如果条件满足其他不分组,我需要一个 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)

以上如预期

  1. 取消注释 Where 子句仅将 a 和 b==> 包含在空值 ( "" ) 中的所有项目中

  2. 注释 Where 子句将 a、b 和 "" 字符串分组以制作一个包含 3 个组(a、b 和 "")的列表。

Tim*_*ter 6

假设第一列类似于 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()用作组的键。