使用数组项过滤列表

cha*_*ara 0 c# linq

我需要用数组中的字符串过滤列表。下面的代码不会返回预期的结果。

List<searchModel> obj=//datasource is assigned from database

mystring="city1,city2";
string[] subs = mystring.Split(',');
foreach (string item in subs)
{
    obj = obj.Where(o => o.property.city.ToLower().Contains(item)).ToList();
}
Run Code Online (Sandbox Code Playgroud)

hor*_*rgh 5

就您使用的而言Contains,我想说您可能正在尝试获得

  1. 条目,city其中匹配来自mystring
  2. 条目,city其中匹配所有城市mystring

因此,具有(我简化了searchModel课程,省略了property):

List<searchModel> obj = new List<searchModel>
{
    new searchModel{city = "city1"},
    new searchModel{city = "city2"},
    new searchModel{city = "city3"}
};

var mystring = "city1,city2";
var subs = mystring.Split(',').ToList(); //let it be also List<T>
Run Code Online (Sandbox Code Playgroud)

我们可以做的:

//the 1st option
var orFilter = obj.Where(o => subs.Any(s => o.city.ToLower().Contains(s)))
                  .ToList();
//the 2nd option
var andFilter = obj.Where(o => subs.TrueForAll(s => o.city.ToLower().Contains(s)))
                   .ToList();
Run Code Online (Sandbox Code Playgroud)

然后做一个简单的检查

foreach (var o in andFilter)
{
    Console.WriteLine(o.city);
}
Run Code Online (Sandbox Code Playgroud)

我会说 OP 等于选项 2,而不是选项 1。