LINQ:比较2表返回非重复行

时间:2011-08-19 08:52:23

标签: linq

表1 ID 1 3

表2 ID,名称 1 a 2 b 3 c

我们怎么能写一个linq来只返回一个表 2 b 应比较两个表并返回第一行

2 个答案:

答案 0 :(得分:2)

听起来像是:

var query = table2.Where(data => !table1.Select(x => x.ID).Contains(data.ID));

或者获得第一行:

var first = table2.Where(data => !table1.Select(x => x.ID).Contains(data.ID))
                  .First();

请注意,LINQ to Objects中的内容相对较慢 - 您需要:

HashSet<int> ids = new HashSet<int>(table1.Select(x => x.ID));
var query = table2.Where(data => !ids.Contains(data.ID));

第一个应该是LINQ to SQL之类的东西。

答案 1 :(得分:0)

我不完全理解这个问题 - 但是你会做一些像

这样的事情

            var t1 = new[] {1, 2, 3};
            var t2 = new[] {1, 4, 3};
            var res = t2.Where(x => !t1.Contains(x));