日期:2014-05-20  浏览次数:20707 次

写一个linq 表达式或lambda表达式
V1=IEnumerable<A>

V2=IEnumerable<A>

A是有一属性为ID
V2是V1的子集
求V1中不在V2的数据,根据V1的A.ID 不等于V2的A.ID

在线等,谢谢
linq lambda 子查询

------解决方案--------------------
listA.Where(x => listB.Select(z => z.ID == x.ID) == null);
------解决方案--------------------
楼主的场景使用Except()更方便:


public static IEnumerable<TSource> Except<TSource>(
      this IEnumerable<TSource> first,
      IEnumerable<TSource> second
  )

// 或

public static IEnumerable<TSource> Except<TSource>(
      this IEnumerable<TSource> first,
      IEnumerable<TSource> second,
      IEqualityComparer<TSource> comparer
  )

------解决方案--------------------
引用:
V1=IEnumerable<A>

V2=IEnumerable<B>

A是有一属性为ID
B是有一属性为ID

求V1中不在V2的数据,根据V1的A.ID 不等于V2的B.ID

这个更一般化

var query=V1.Where(x=>!V2.Select(y=>y.ID).Contains(x.ID));
------解决方案--------------------
引用:
引用:V1=IEnumerable<A>

V2=IEnumerable<B>

A是有一属性为ID
B是有一属性为ID

求V1中不在V2的数据,根据V1的A.ID 不等于V2的B.ID

这个更一般化
var query=V1.Where(x=>!V2.Select(y=>y.ID).Contains(x.ID));……

++1


var query = from x in V1
            where !V2.Select(y => y.ID).Contains(x.ID)
            select x;