6

我有一个从模型中的数据库获得的 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

4 回答 4

9

您可以使用Array.IndexOf<T> 方法检查数组是否包含某些项目:

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

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

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

然后生成的查询如下所示:

var k = objlist.Where(u => strset.Contains(u.somecol)).ToList();
于 2013-08-17T11:37:41.753 回答
3

使用Contains

var k = objlist.Where(u => strarray.Contains(u.somecol)).toList();
于 2013-08-17T11:31:41.073 回答
3

尝试这个:

List<object> objlist = db.objects.tolist();
string[] strarray; // obtained from a long code.
var k = objlist.Where(u => strarray.Contains(u.somecol)).toList();
于 2013-08-17T11:31:42.450 回答
2
var k = objlist.Where(u => strarray.Any(x=>x == u.somecol)).ToList();
于 2013-08-17T11:31:19.460 回答