2013-03-18 61 views
-3

是什么超过containsLinqTOEntities差高炮存在并包含

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)); 
+7

'存在()'不存在。 – SLaks 2013-03-18 16:00:34

+0

存在这样的方法。 – Phil 2013-03-18 16:01:14

+2

为了说明,[列表]公开了[Exists()](http://msdn.microsoft.com/zh-cn/library/bfed8bca.aspx)。你的'''是一个数组,而不是一个列表。 – 2013-03-18 16:04:05

回答

3
  1. Exists使用exists之间的差的List<T>一个方法,存在于阵列没有这样的方法或IEnumerable<T>扩展。
  2. 此方法的使用的正确的语法是x => s.Exists(y => y == x.id)(返回布尔你应该通过谓词,即方法)
  3. 所不同的是 - 通过的LINQ支撑于实体ContainsExists不受支持。
+0

+1,你在解释这两种方法之间的差异方面做得比我好得多。但是你能否描述通过一个原始值和一个谓词之间的区别?我只是认为这对理解这两种方法之间的关键差异至关重要(因为EF支持'Any'而不是'Exists',所以它不像一个大问题\差异在这里) – 2013-03-18 16:24:51

+0

@IlyaIvanov抱歉,没有让你在这里:)谓词是Exists方法签名的一部分,传递原始值和谓词之间的区别很简单 - 您可以使用谓词调用此方法,或者您的代码不编译 – 2013-03-18 16:29:44

+0

例如,您可以捕获谓词中的局部变量,通过谓词访问它,从而创建比较灵活的条件。无论如何 - 让我们自己学习吧。说到语法 - 你的回答完全有效:) – 2013-03-18 16:31:29