我有一个类如下:
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
属性)。如果您想要 true
和 false
属性,我们必须将其设置为 @true
和 @false
,因为 true
和 false
是关键字:
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/