使用Linq删除因列值不同而重复的重复项

时间:2014-09-08 18:22:38

标签: c# linq

我有一个列表,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
                     });

以及其他一些变体,但无法使其发挥作用。

1 个答案:

答案 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") 
                     });