【问题标题】:How to construct dynamic LINQ query string be for a query that looks like *abc*def*如何为看起来像 *abc*def* 的查询构造动态 LINQ 查询字符串
【发布时间】:2016-09-20 21:38:39
【问题描述】:

我在我的一个项目中使用动态 LINQ 来过滤数组。库可以从下载 NuGet Gallery linkCodeplex link。 我正在使用来自 NuGet 链接的 1.0.6 版本。它与 LINQ 相同,但可以使用字符串指定条件。例如:myArray.Where(myDynamicQueryString)

我根据左、右表达式和运算符即时构建 QueryString。例如,如果我的查询是

  1. abc
  2. xyz == 5.0,myDynamicQueryString 将是 (xyz = 5)
  3. def == "Name",myDynamicQueryString 将是 (def = "Name")
  4. var == "Str*", myDynamicQueryString 将是 (var.StartsWith("Str"))
  5. var == "*Str", myDynamicQueryString 将是 (var.EndsWith("Str"))
  6. var == "*Str*", myDynamicQueryString 将是 (var.Contains("Str"))

现在,对于像 *abc*def* 这样的查询,查询字符串应该是什么?

我知道这意味着,它可以以任何东西开始,以任何东西结束,并且在 abc 和 def 之间有任何东西,但是 abc 和 def 应该以特定的顺序出现。但是,如何使用 StartsWith/EndsWith/Contains 将其转换为查询表示(这些是我知道的,如果还有其他我可以使用,请告诉我)

【问题讨论】:

    标签: c# regex linq dynamic-linq


    【解决方案1】:

    看起来你需要的是IndexOf。如果存在,则返回子字符串的起始索引,否则返回 -1。

    var.Contains("abc") && var.Contains("def") && 
       var.IndexOf("abc") > var.IndexOf("def")
    

    例如,如果我们使用字符串XabcXdefXabcvar.IndexOf("abc") 将产生1var.IndexOf("def") 将产生5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多