Linq加入多个标准(事先未知的数量)

时间:2012-04-26 20:25:34

标签: c# linq entity-framework lambda

我需要在linq查询中加入多个条件,我有一个如下所示的条件框:

enter image description here

目前我使用的查询只能处理单个标记:

var c = *text after the t:*
var r = rs.Returns.Where(x => x.Lines.Any(y => y.Tags.Any(z => z.Name.Contains(c))));

我需要类似的东西(这可能不正确):

var r = rs.Returns.Where(x => x.Lines.Any(y => y.Tags.Any(z => z.Name.Contains(*1st Tag*)) && y.Tags.Any(z.Name.Contains(*2nd Tag*)))); .. etc

以便搜索tags Line所有AND并应用{{1}}。有没有一种简单的方法来实现这样的事情?

非常感谢提前。

2 个答案:

答案 0 :(得分:2)

var r = rs.Returns.Where(x => x.Lines.Any(y => searchTags.All(stag => y.Tags.Any(z => z.Name.Contains(stag)))));

searchTags应包含要搜索的所有标记。无需使用循环。

答案 1 :(得分:0)

我认为你正在寻找这样的东西:

List<string> tags = new List<string>() { "tag1", "tag2" };

var query = rs.Returns.AsEnumerable();
foreach(string tag in tags)
{
  string tmp = tag;
  query = query.Where(x => x.Lines.Any(y => y.Tags.Any(z => z.Name.Contains(tmp))));
}