【问题标题】:Linq Join Multiple Criteria (Number not known beforehand)Linq Join Multiple Criteria (Number not known before)
【发布时间】:2012-04-27 04:33:11
【问题描述】:

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

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

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

这样Line 的所有tags 都会被搜索并应用AND。有没有简单的方法来实现这样的事情?

非常感谢。

【问题讨论】:

    标签: c# linq entity-framework lambda


    【解决方案1】:
    var r = rs.Returns.Where(x => x.Lines.Any(y => searchTags.All(stag => y.Tags.Any(z => z.Name.Contains(stag)))));
    

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

    【讨论】:

      【解决方案2】:

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

      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))));
      }
      

      【讨论】:

        猜你喜欢
        • 2016-03-09
        • 2021-06-11
        • 2015-06-23
        • 1970-01-01
        • 2013-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多