使用LINQ

时间:2017-04-12 19:41:17

标签: c# linq

我有这个清单:

CustomerA

  • Cod123
  • Cod456

CustomerB

  • Cod456
  • Cod789

CustomerC

  • Cod888
  • COD999

我想使用LINQ返回此内容:

CustomerA

  • Cod123
  • Cod456

CustomerC

  • Cod888
  • COD999

因为 CustomerA CustomerB 具有相同的鳕鱼: Cod456

我的课程:

    public class Customer
{
    public string Name { get; set; }
    public List<Cod> Cods { get; set; }
}

public class Cod
{
    public string Number { get; set; }
}

我的尝试在GroupBy行中构建。

            var customersOK = customersDuplicatedCods
                    .GroupBy(p => p.Cods.Number)
                    .Select(g => g.First())
                    .ToList();

1 个答案:

答案 0 :(得分:1)

听起来你实际上并不希望它们分组,你只需要删除重复项。

This Q&amp; A解释了如何做到这一点。

基本上你会创建一个IEqualityComparer<Customer>

class DistinctItemComparer : IEqualityComparer<Customer> 
{
    public bool Equals(Customer x, Customer y) 
    {
        return x.Cods.Intersect(y.Cods).Any();
    }

    public int GetHashCode(Customer obj) 
    {
        return 0;
    }
}

并通过customers.Distinct(new DistinctItemComparer())

进行调用