Что такое linq, эквивалентный оператору SQL IN

С linq я должен проверить, присутствует ли значение строки в массиве.
Эквивалент запроса sql:

WHERE ID IN (2,3,4,5) 

Как я могу сделать?

.Содержит

 var resultset = from x in collection where new[] {2,3,4,5}.Contains(x) select x 

Конечно, с вашей простой проблемой вы можете иметь что-то вроде:

 var resultset = from x in collection where x >= 2 && x <= 5 select x 

Выполните эквивалент SQL IN с помощью IEnumerable.Contains () .

 var idlist = new int[] { 2, 3, 4, 5 }; var result = from x in source where idlist.Contains(x.Id) select x; 
 db.SomeTable.Where(x => new[] {2,3,4,5}.Contains(x)); 

или

 from x in db.SomeTable where new[] {2,3,4,5}.Contains(x) 

Intersect и Except являются немного более краткими и, вероятно, будут немного быстрее.

В

 collection.Intersect(new[] {2,3,4,5}); 

НЕ В

 collection.Except(new[] {2,3,4,5}); 

или

Синтаксис метода для IN

 collection.Where(x => new[] {2,3,4,5}.Contains(x)); 

и НЕ ВХОД

 collection.Where(x => !(new[] {2,3,4,5}.Contains(x))); 

IEnumerable<T>.Contains(T) должен делать то, что вы ищете.

Очень простой пример использования .Contains ()

 List<int> list = new List<int>(); for (int k = 1; k < 10; k++) { list.Add(k); } int[] conditionList = new int[]{2,3,4}; var a = (from test in list where conditionList.Contains(test) select test); 

Вы можете написать help-method:

  public bool Contains(int x, params int[] set) { return set.Contains(x); } 

и используйте короткий код:

  var resultset = from x in collection where Contains(x, 2, 3, 4, 5) select x; 

Ниже приведен общий метод расширения, который можно использовать для поиска значения в списке значений:

  public static bool In<T>(this T searchValue, params T[] valuesToSearch) { if (valuesToSearch == null) return false; for (int i = 0; i < valuesToSearch.Length; i++) if (searchValue.Equals(valuesToSearch[i])) return true; return false; } 

Это можно использовать как:

 int i = 5; i.In(45, 44, 5, 234); // Returns true string s = "test"; s.In("aa", "b", "c"); // Returns false 

Это удобно в условных операторах.