使用.GroupBy()我能够组合这个列表,
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列已拆分为两个布尔列。
但是,如果我想从第一个列表中保留另一个值,该怎么办?所以第一个表现在是这样的:
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
这是c#列表:
var items = new List<Item>
{
new Item {Color = "Green", Id = 1, Value = Value1},
new Item {Color = "Red", Id = 1, Value = Value1},
new Item {Color = "Red", Id = 2, Value = Value2},
new Item {Color = "Green", Id = 3, Value = Value3},
new Item {Color = "Red", Id = 4, Value = Value4},
new Item {Color = "Green", Id = 4, Value = 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 :(得分:1)
假设Color
是Id
的函数,只是Color
上的组。它不会改变组的数量和内容。
...
group x by new { id, color } into g
...
您现在可以使用color
,因为它是密钥的一部分:g.Key.color
。
答案 1 :(得分:1)
试试这个: 我们的想法是使用id和值进行分组
var q = items
.GroupBy(x => new { x.Id, x.Value})
.Select(group => new
{
Id = group.Key.Id,
Green = group.Any(item => item.Color == "Green"),
Red = group.Any(item => item.Color == "Red"),
Value = group.Key.Value,
});