我有一个列表,ApplesList
AppleId Color
----------------
1 Green
1 Red
2 Red
3 Green
4 Red
4 Green
并希望像这样组合列表:
AppleId Green Red
------------------------
1 1 1
2 0 1
3 1 0
4 1 1
已删除重复的AppleId记录,并且Color列已拆分为两个布尔列。如何在Linq中完成?
修改 如果我想从第一个列表中保留另一个值,该怎么办?所以第一个表现在是这样的:
AppleId Color Value
-----------------------------
1 Green Value1
1 Red Value1
2 Red Value2
3 Green Value3
4 Red Value4
4 Green Value4
,分组表格如下:
AppleId Green Red Value
-----------------------------------
1 1 1 Value1
2 0 1 Value2
3 1 0 Value3
4 1 1 Value4
我尝试使用
var q = items.GroupBy(x => x.Id)
.Select(group => new
{
Id = group.Key,
Green = group.Any(item => item.Color == "Green"),
Red = group.Any(item => item.Color == "Red"),
Value = x.Value
});
以及其他一些变体,但无法使其发挥作用。
答案 0 :(得分:4)
使用linq group by:
var items = new List<Item>
{
new Item {Color = "Green", Id = 1},
new Item {Color = "Red", Id = 1},
new Item {Color = "Red", Id = 2},
new Item {Color = "Green", Id = 3},
new Item {Color = "Red", Id = 4},
new Item {Color = "Green", Id = 4},
};
var q = items.GroupBy(x => x.Id)
.Select(group => new
{
Id = group.Key,
Green = group.Any(item => item.Color == "Green"),
Red = group.Any(item => item.Color == "Red")
});