根据条件在C#中合并两个列表

时间:2012-07-10 17:16:31

标签: c# list merge

我有两个基于类

的列表
public class test
{
    public string id { get; set; }
    public Int32 quantity { get; set; }
}

List1 
{"A", 1}
{"B", 2}
{"C", 3}

List2
{"A", 1}
{"B", 4}
{"D", 5}

合并列表需要包含列表中的所有项目,如果两个列表中都出现相同的ID,则应该比较数量并选择数量更大的数量。 合并列表必须是

Merged list
{"A", 1}
{"B", 4}
{"C", 3}
{"D", 5}

列表中的项目顺序并不重要。

如何实现此合并。

2 个答案:

答案 0 :(得分:8)

假设“ID”应该始终是唯一的:

var list = (from l in List1.Concat(List2)
           group l by l.id into g
           select new test() {id = g.Key, quantity = g.Max(x=>x.quantity)})
           .ToList();

答案 1 :(得分:8)

您可以使用以下内容:

var query = list1.Concat(list2)
                 .GroupBy(x => x.id)
                 .Select(g => g.OrderByDescending(x => x.quantity).First())
                 .ToList();

这不好,但它会起作用。 (这种方法避免了创建一个新的测试实例,因为lc。的答案确实如此。我不知道这对你来说是否重要,但我可以看到它在某些情况下很重要。)

它确实假设如果ID在任一列表中出现多次,那么您仍然只希望在结果中返回一次。

或者,使用MoreLINQ中的MaxBy

var query = list1.Concat(list2)
                 .GroupBy(x => x.id)
                 .Select(g => g.MaxBy(x => x.quantity))
                 .ToList();