相当于SQL IN运算符的linq是什么?

用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 

使用IEnumerable.Contains()执行SQL IN的等效操作。

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

您可以编写帮助方法:

  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; 

以下是可用于在值列表中search值的通用扩展方法:

  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 

这在条件语句中很方便。