C# 存在和包含之间的LINQTO实体差异
使用C# 存在和包含之间的LINQTO实体差异,c#,linq-to-entities,C#,Linq To Entities,使用存在而不是包含 var s = new int[] { 1, 2, 3, 4, 5 }; dbset.where(x => s.contains(x.id); 或 是List的方法,在数组或IEnumerable扩展上没有这种方法 使用此方法的正确语法是x=>s.Exists(y=>y==x.id)(您应该传递谓词,即返回布尔值的方法) 区别在于-包含Linq to实体支持的,存在不受支持 Exists()不存在。不存在这样的方法。为了澄清这一点,List公开了该方法。你的s是一个数
存在
而不是包含
var s = new int[] { 1, 2, 3, 4, 5 };
dbset.where(x => s.contains(x.id);
或
List
的方法,在数组或IEnumerable
扩展上没有这种方法x=>s.Exists(y=>y==x.id)
(您应该传递谓词,即返回布尔值的方法)包含Linq to实体支持的
,存在
不受支持Exists()
不存在。不存在这样的方法。为了澄清这一点,List
公开了该方法。你的s
是一个数组,而不是一个列表。+1,你在解释这两种方法之间的差异方面比我做得好得多。但是你能描述一下传递原始值和谓词之间的差异吗?我只是认为这对于理解这两种方法之间的关键区别是至关重要的(因为EF支持Any
,而不是Exists
,所以这不像是一个大问题\区别)@IlyaIvanov抱歉,没有让你明白:)谓词是Exists方法签名的一部分,传递原始值和谓词之间的区别很简单—您可以使用谓词调用此方法,或者您的代码不编译。例如,您可以在谓词中捕获局部变量并在谓词中访问它,从而为比较创建更灵活的条件。无论如何,让我们把它留给自学吧。说到语法,你的答案完全正确:)
var s = new int[] { 1, 2, 3, 4, 5 };
dbset.Where(x => s.Exists(y => x.id));