Linq Where匹配数组的条件

时间:2013-08-17 11:29:36

标签: c# asp.net-mvc linq lambda

大家好我有一个从我的模型中的数据库获得的linq列表。现在我有一个从我的控制器获得的字符串数组。我想构建一个声明

伪代码

List<object> objlist = db.objects.tolist();
string[] strarray; // obtained from a long code.
var k = objlist.Where(u => u.somecol == strarray[0] || u.somecol == strarray[1]........strarray[n]).toList();

我对如何实现这一点感到有点困惑,因为strarray[]的长度可变,最多可包含1000个单词。

4 个答案:

答案 0 :(得分:8)

您可以使用Array.IndexOf<T> Method检查数组是否包含某个项:

bool strarrayContainsX = Array.IndexOf<string>(strarray, "X") >= 0;

但是,我建议您使用HashSet<string>而不是字符串数组来处理多个项目。 The HashSet<T> Class提供Contains Method来检查某个集合是否包含某个项目:

HashSet<string> strset = new HashSet<string>(strarray);
bool strsetContainsX = strset.Contains("X");

结果查询如下所示:

var k = objlist.Where(u => strset.Contains(u.somecol)).ToList();

答案 1 :(得分:3)

试试这个:

List<object> objlist = db.objects.tolist();
string[] strarray; // obtained from a long code.
var k = objlist.Where(u => strarray.Contains(u.somecol)).toList();

答案 2 :(得分:2)

var k = objlist.Where(u => strarray.Any(x=>x == u.somecol)).ToList();

答案 3 :(得分:2)

使用Contains

var k = objlist.Where(u => strarray.Contains(u.somecol)).toList();