2013-03-18 93 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