Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ:compare 2表返回非重复行_Linq - Fatal编程技术网

LINQ:compare 2表返回非重复行

LINQ:compare 2表返回非重复行,linq,Linq,表1 身份证件 1. 三, 表2 身份证,姓名 1A 2 b 3 c 我们如何编写一个linq来返回一个只有 2 b 应该比较两个表并返回第一行,听起来像: var query = table2.Where(data => !table1.Select(x => x.ID).Contains(data.ID)); 或获取第一个这样的行: var first = table2.Where(data => !table1.Select(x => x.ID).Contains

表1 身份证件 1. 三,

表2 身份证,姓名 1A 2 b 3 c

我们如何编写一个linq来返回一个只有 2 b 应该比较两个表并返回第一行,听起来像:

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对象中,这将相对较慢-您可能需要:

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

第一个应该可以用LINQ到SQL之类的语言来表达。

我不完全理解这个问题,但通常你会这样做


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

我放弃了。我也在写同样的东西,但要打败乔恩·斯基特是很困难的;)你至少得到了我的投票..HashSet ID=newhashset(table1.Select(x=>x.ID));var query=table2.Where(data=>!ids.Contains(data.ID));给错误一个新的x。ID@linqbeta:这表明
table1
中的类型没有ID属性,或者它不是
int
。在这个问题中提供更多的细节,我更有可能给出一个编译了。。。请阅读(同时给出更准确的错误消息…)这是两个数据表,第一个字段为[id],第二个字段为[id,name]@linqbeta:你是说它们是普通的
数据表
?如果是这样,您需要使用
字段
。在你用示例代码把问题弄清楚之前,我认为编辑我的答案没有多大意义。