gpt4 book ai didi

C# Linq to Group to a list if a Condition meets else 不分组

转载 作者:行者123 更新时间:2023-12-05 09:18:02 25 4
gpt4 key购买 nike

我有一个 list
我的需求

如果条件满足,我需要一个 LINQ lambda 查询来分组到列表,否则不分组。

i.e On a condition I want it to be grouped
else it should not be grouped

我已经在网上搜索了 - 我获得了有关按条件分组的详细信息,但我无法了解如何在不分组的情况下包含剩余项目。

在网上找到的一些信息用于有条件地分组 - 但是那些不符合条件的项目不包含在结果列表中。

例如

List = [{1,"a"},{40,""),{9,"a"},{52,"b"),{2,"b"},{99,""),{88,"b"}]

预期的结果列表将按 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,""} ]

我尝试过的

var resultantList =  sigList
.GroupBy(s => s.SignalGroup)
.Select(grp => grp.ToList())
//.Where(g => !g.Any(grp => grp.SignalGroup == ""))
.ToList();

如预期的那样

  1. 取消注释 Where 子句仅分组 a 和 b==> 所有那些具有空值 ( "") 的项目都不会被包括在内

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

最佳答案

假设第一列类似于唯一的 Id:

var resultantList =  sigList
.GroupBy(s => s.SignalGroup == "" ? s.Id.ToString() : s.SignalGroup)
.Select(grp => grp.ToList())
.ToList();

因此,如果 SignalGroup 是空字符串,则 GroupBy 采用(唯一)ID,在所有其他情况下采用 SignalGroup,因此您得到如果 SignalGroup"",则每个 ID 一组的期望结果。

如果它不是唯一的,请使用 Guid.NewGuid().ToString() 作为组的键。

关于C# Linq to Group to a list if a Condition meets else 不分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45998549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com