相当于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
这在条件语句中很方便。