c# - 如何使用 C# lambda 合并单个列表

标签 c# linq

我有一个类如下:

public class MyData
{
    public int Key { get; set; }
    public string MyString { get; set; }
    public bool MyFlag { get; set; }
}

我有这些类的列表:

var data = new List<MyData>();

填充如下:

data.Add(new MyData() { Key = 1, MyFlag = true, MyString = "Hello" });
data.Add(new MyData() { Key = 1, MyFlag = false, MyString = "Goodbye" });
data.Add(new MyData() { Key = 2, MyFlag = true, MyString = "Test" });
data.Add(new MyData() { Key = 2, MyFlag = false, MyString = "Merge" });
data.Add(new MyData() { Key = 3, MyFlag = false, MyString = "Data" });

我要的是如下列表:

Key       true       false
1         Hello      Goodbye
2         Test       Merge
3                    Data

我需要一个反射(reflect)上述三个值的匿名类型。我发现一些帖子和文章似乎建议使用 GroupJoin,但我不确定在这种情况下如何使用它,因为它似乎允许加入两个单独的列表。

最佳答案

我建议分组(通过Key 属性)。如果您想要 truefalse 属性,我们必须将其设置为 @true@false,因为 truefalse 是关键字:

var result = data
  .GroupBy(item => item.Key)
  .Select(chunk => new {
     Key =  chunk.Key,
     @true = chunk.FirstOrDefault(item => item.MyFlag)?.MyString, 
     @false = chunk.FirstOrDefault(item => !item.MyFlag)?.MyString, 
   });

关于c# - 如何使用 C# lambda 合并单个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54904412/

相关文章:

javascript - 在 jquery click 函数中定义一个长数组

c# - 使用另一个集合实现一个集合

VBer 的 C# 问题。私有(private)字段是否必须声明为静态?

c# - 如何知道我的 linq 查询是否返回 null

c# - 如何检查 DataTable 上的 IS NULL?

c# - 创建 C# LINQ 可选连接扩展

C#:XML 反序列化限制

c# - 计时器流逝的资源全局化

c# - 用于解析二进制消息包的字节流的高效 C# 字节队列

c# - IEnumerable 的可能重复枚举