如何为看起来像* abc * def *的查询构造动态LINQ查询字符串

时间:2016-05-23 21:09:03

标签: c# regex linq dynamic-linq

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

我基于左,右表达式和运算符动态构建QueryStrings。例如,如果我的查询是

  1. abc&lt; 3,我的动态查询字符串将是(abc <3)
  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”))
  7. 现在,查询字符串应该用于* abc * def *之类的查询?

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

1 个答案:

答案 0 :(得分:1)

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

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

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