我有如下实体
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或某种方式
答案 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);
}
}