Linq TO Entities Exists 和 contains 之间的区别

Posted

技术标签:

【中文标题】Linq TO Entities Exists 和 contains 之间的区别【英文标题】:LinqTOEntities difference beteen Exists and contains [closed] 【发布时间】:2013-03-18 15:58:31 【问题描述】:

使用existscontains 有什么区别

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

分组后的LINQ to Entities,COUNT和WHERE不起作用

在 LINQ to Entities 中批量删除

Linq to Entities - 3 层架构

在实体框架和 Linq to Entities 中使用规范模式和表达式