比较两个列表C#

时间:2013-05-09 08:31:34

标签: c# lambda

我有如下实体

public class A
{
    public virtual int Id { get; set; }
    public virtual string AccountName { get; set; }
    public virtual string AccountId { get; set; }
    public virtual Status Status { get; set; }
    public virtual IList<Service> Services { get; set; }
}

我有另一个类型为服务的列表,我想与实体A.Services进行比较,只获得匹配(相同)的A的结果。

我想要一个lambda express或某种方式

4 个答案:

答案 0 :(得分:2)

你可以让你的类实现IEquatable,然后使用Linq Intersect。

public class A : IEquatable<A>
{
    public virtual int Id { get; set; }
    public virtual string AccountName { get; set; }
    public virtual string AccountId { get; set; }
    public virtual Status Status { get; set; }
    public virtual IList<Service> Services { get; set; }

    //Implement IEquatable interfaces 
    //...
}

请注意,使用LINQ Intersection调用时,请使用以下一个:

public static IEnumerable<TSource> Intersect<TSource>(
          this IEnumerable<TSource> first,
          IEnumerable<TSource> second,
          IEqualityComparer<TSource> comparer) //  <--- This is important

答案 1 :(得分:1)

您可以使用Enumerable.Intersect方法。

  

使用默认值生成两个序列的集合交集   等于比较来比较值。

public class A : IEquatable<Service>
{
    public virtual int Id { get; set; }
    public virtual string AccountName { get; set; }
    public virtual string AccountId { get; set; }
    public virtual Status Status { get; set; }
    public virtual IList<Service> Services { get; set; }
}

var commonListofService = services1.Intersect(services2);

答案 2 :(得分:0)

实施IEquatable<Service>,然后您可以使用Intersect,如下所示

var common = services1.Intersect(services2);

答案 3 :(得分:0)

为什么不在A类上有一个方法来做它,那么你不需要为IEquatable而烦恼......

public class A
{
    public virtual int Id { get; set; }
    public virtual string AccountName { get; set; }
    public virtual string AccountId { get; set; }
    public virtual Status Status { get; set; }
    public virtual IList<Service> Services { get; set; }

    public List<Service> GetCommonServices(A compareTo)
    {
         return this.Services.Intersect(compareTo.Services);
    }
}