Linq TO Entities Exists 和 contains 之间的区别
Posted
技术标签:
【中文标题】Linq TO Entities Exists 和 contains 之间的区别【英文标题】:LinqTOEntities difference beteen Exists and contains [closed] 【发布时间】:2013-03-18 15:58:31 【问题描述】:使用exists
和contains
有什么区别
var s = new int[] 1, 2, 3, 4, 5 ;
dbset.where(x => s.contains(x.id);
或
var s = new int[] 1, 2, 3, 4, 5 ;
dbset.Where(x => s.Exists(y => x.id));
【问题讨论】:
Exists()
不存在。
没有Exists这样的方法。
澄清一下,Exists() 被List<T>
暴露。您的 s
是一个数组,而不是一个列表。
【参考方案1】:
-
Exists 是
List<T>
的方法,在数组或IEnumerable<T>
扩展上没有这种方法。
这个方法的正确用法是x => s.Exists(y => y == x.id)
(你应该传递谓词,即返回布尔值的方法)
区别在于 - Contains
受 Linq to Entities 支持,Exists
不受支持。
【讨论】:
+1,你在解释这两种方法之间的区别方面做得比我好得多。但是你能否描述一下传递原始值和谓词之间的区别?我只是认为这对于理解这两种方法之间的关键区别至关重要(因为 EF 支持Any
而不是Exists
,所以这不是一个大问题\差异在这里)
@IlyaIvanov 抱歉,没有把你带到这里 :) 谓词是 Exists 方法签名的一部分,传递原始值和谓词之间的区别很简单——你可以用谓词调用这个方法,或者你的代码不编译
好吧,例如,您可以在谓词中捕获局部变量并在谓词中访问它,从而为比较创造更灵活的条件。无论如何 - 让我们把它留给自学吧。谈到语法 - 你的回答是完全有效的:)以上是关于Linq TO Entities Exists 和 contains 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
如果存在-UPDATE-else-INSERT 与 Linq-to-Entities?
Linq-to-Entities:带有 WHERE 子句和投影的 LEFT OUTER JOIN