如何查询DataSet中两个Table的差集?不用循环
本帖最后由 pengwei0417 于 2014-01-19 21:22:50 编辑 我用Linq to DataSet是这样写的:
Dim AID = From sfzh In Table2.AsEnumerable() Select sfzh.Field(Of String)("AID") '取得对比表中AID
Dim Resultrows = From rows In Table1.AsEnumerable() Where Not AID.Contains(rows.Field(Of String)("BID")) Select rows '查询差集
可以得到结果,但Table2中有四十余万条记录,Table1中有1000条记录,执行的速度非常慢。
如何解决?
是不是没优化好,AID和BID都是字符串。
在“数据集中两个表,这种连接查询如何使用LINQ语句?”贴中,版主caozhy最后给的:
Dim ids = Table1.Select(Function(x) x!ID).Except(Table2.Select(Function(x) x!ID)).Select(Function(x) Table1.Where(Function (y) y!ID == x))
还是不会使用?提示:Lambda 表达式无法转换为“String”,因为“String”不是委托类型。
[解决办法]
Dim ids = Table1.Select(Function(x) x!ID).Except(Table2.Select(Function(x) x!ID)).Select(Function(x) Table1.First(Function (y) y!ID == x))