对两个DataTable对象使用Except子句

时间:2014-05-28 01:36:50

标签: c# sql-server linq linq-to-objects

我目前想要从具有各种字段的DataTable对象中选择各种记录,但我想要排除其CustomerID存在于另一个DataTable中的记录。或多或少喜欢使用"除了"或" NOT IN" SQL中的子句。在SQL中将是

SELECT * FROM Table1 WHERE CustomerID Not In (SELECT CustomerID FROM Table2)

我希望将结果集放在另一个DataTable中。

这就是我所拥有的:

var test = (from dt1 in lastMonthFunded.AsEnumerable() 
select new { CustomerId = dt1.Field<int>("CustomerId"), 
           LoanNumber =  dt1.Field<Int32>("LoanNumber") })
          .Except(from dt2 in lastYearFunded 
          select new {customerNum=dt2.Field<Int32>("LoanNumber")});

Visual Studio显示以下消息:

  

错误1实例参数:无法转换为&#39; System.Data.EnumerableRowCollection&#39;到了System.Linq.IQueryable&#39;

     

错误2&#39; System.Data.EnumerableRowCollection&#39;不包含&#39;除外&#39;的定义和最好的扩展方法重载&#39; System.Linq.Queryable.Except(System.Linq.IQueryable,System.Collections.Generic.IEnumerable)&#39;有一些无效的论点

1 个答案:

答案 0 :(得分:0)

只要您的对象依赖于IQUeryable或IEnumerable类,您就应该能够使用Linq:

var test = from dt1 in lastMonthFunded
           where !(from d2 in LastYearFunded
                   select d2.LoanNumber).Contains(dt1.LoanNumber)
           select dt1;

使用上述LINQ,您将能够获得LastYearFunded中不存在的所有lastMonthFunded记录。