我的网络应用程序中有一个模型,如下所示:
class MyClass
{
int ID;
List<AnotherClass> foo {get; set;}
}
class AnotherClass
{
int ID;
string bar;
}
我还有一个由用户提供的过滤字符串列表。
List<string> filter = new List<string> { "foo", "bar" } //as example
我想要的是按照给定的字符串过滤MyClass
:
var result = context.MyClass.Include(mc => mc.foo);
result = result.Where(x => filter.Any(f => f == x.foo.Select(d => d.bar)));
问题是:Select()
返回字符串列表,我无法将字符串与字符串列表进行比较。
任何人都知道如何解决这个问题?
答案 0 :(得分:0)
使用Contains
result = result.Where(x => x.foo.Any(i => filter.Contains(i.bar)));
答案 1 :(得分:0)
如果你想要的是单词:如果过滤器列表中存在任何内部类项目,则查找结果中的任何项目
尝试:
result.Where(item => item.Any(innerItem => filter.Contains(innerItem.bar)))
或者在其他语法中:
var output = (from item in result
from innerItem in item.foo
where filter.Contains(innerItem.bar)
select item);
答案 2 :(得分:0)
您可能需要简单的Any
和Contains
方法,您可以这样做。
result.Where(x => x.foo.Any(f=> filter.Contains(f.bar));