0

我有如下实体

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; }
}

我有另一个类型为 Services 的列表,我想将其与实体 A.Services 进行比较,并仅获取匹配的 A 的结果(相同)。

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

4

4 回答 4

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 交集调用时,请使用以下之一:

public static IEnumerable<TSource> Intersect<TSource>(
          this IEnumerable<TSource> first,
          IEnumerable<TSource> second,
          IEqualityComparer<TSource> comparer) //  <--- This is important
于 2013-05-09T08:34:17.163 回答
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);
于 2013-05-09T08:35:00.243 回答
0

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

var common = services1.Intersect(services2);
于 2013-05-09T08:36:46.623 回答
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);
    }
}
于 2013-05-09T08:53:16.900 回答