LinqWhere条件匹配数组

本文关键字:数组 条件 LinqWhere | 更新日期: 2023-09-27 18:28:04

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

LinqWhere条件匹配数组

您可以使用array.IndexOf<T>方法:

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

但是,我建议您使用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();

使用Contains:

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

试试这个:

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