我有一个类似于以下的课程:
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
我需要一个匿名类型来反映上面的三个值。我发现了一些似乎暗示GroupJoin的帖子和文章,但是我不确定在这种情况下如何使用它,因为它似乎允许加入两个单独的列表。
答案 0 :(得分:8)
我建议分组(通过let endTrim = ((str) => {
let i = str.length - 1
while(str[i] === ' ') {
str = str.slice(0,i)
i--
}
return str
})
属性)。如果要使用Key
和true
属性,则必须将其分别设置为false
和@true
,因为@false
和true
是关键字:
false
答案 1 :(得分:0)
请注意,我现在不在PC前面(因此我无法对其进行测试),但这至少应该给您一个想法。
data
.GroupBy(x => x.Key)
.Select(
x => new {
Key = x.Key,
True = data.SingleOrDefault(y1 => y1.Key == x.Key && y1.MyFlag)?.MyString,
False = data.SingleOrDefault(y2 => y2.Key == x.Key && !y2.MyFlag)?.MyString
});