C# 我想将筛选器字符串从给定字符串(sql server支持的筛选器)格式转换为linq可接受的筛选器格式
我的绳子看起来像-C# 我想将筛选器字符串从给定字符串(sql server支持的筛选器)格式转换为linq可接受的筛选器格式,c#,.net,linq,C#,.net,Linq,我的绳子看起来像- "Industry" = "Information Technology" And "AdID" in ("5","3") And "Advertiser" = "Google" 我希望这个字符串的格式如下 Industry = "Information Technology" And AdID.Contains(5,3) And Advertiser = "Google" 应删除左侧双引号(“),也应删除右侧双引号中的数值。此外,它应将中的和不在中转换为abc.Cont
"Industry" = "Information Technology" And "AdID" in ("5","3") And "Advertiser" = "Google"
我希望这个字符串的格式如下
Industry = "Information Technology" And AdID.Contains(5,3) And Advertiser = "Google"
应删除左侧双引号(“),也应删除右侧双引号中的数值。此外,它应将中的和不在中转换为abc.Contains()
和!abc.Contains()
。还应将是和不是转换为abc.Equals()
和!abc.Equals()
我尝试将字符串拆分为多个部分并进行修改和替换,但尚未找到任何合适的解决方案。这应该是可能的。您可以用不同的方式拆分字符串。首先,我将使用每个逻辑门类型(and、or)拆分字符串
您可以这样做:
string data = "\"Industry\" = \"Information Technology\" And \"AdID\" in (\"5\",\"3\") And \"Advertiser\" = \"Google\"";
var output = data.Split(new string[] { "And" , "Or"}, StringSplitOptions.None);
此操作的输出将是一个字符串数组。但您还需要知道每个“and”和“or”的索引,以便知道输出数组中每个字符串应考虑的门类型。如果您只有带有“and”的情况“这变得更容易,因为您可以使用常规拆分,并且不必考虑逻辑门类型
这还需要使用正则表达式来查找不同的模式,如集合:
“5”、“3”中的“AdID”
如果你能找到一种识别这种模式的方法,它可以被制成类似于:
(new string[] {"1","2", "3"}).Contains("1")
SQL代码的特殊情况越多,定义越少,这就越难实现。所以如果你能保证f.ex。“和”总是“和”或“和”,并且集合总是定义为f.ex。喜欢(“5”、“3”)和不喜欢(“5”、“3”)以及以其他方式更改SQL编写方式的格式和样式。如果您能够确保这一点,那么解析它就会容易得多
你问
'应删除左侧双引号(“),也应从数值的右侧双引号中删除'
这可以用正则表达式来完成,但对我来说有点太高级了。
如果您这样做,C#将改为:
(new int[] {1,2, 3}).Contains(1)
我希望您意识到,AdID in(“5”,“3”)
与AdID.Contains(5,3)
(newint[]{1,2,3})。Contains(1)这也是动态Linq不接受的。非常确定它应该接受吗?或者说动态Linq,您指的是一种Linq类型,而不是您通常在某些类中使用的Linq?例如:string[]NewCollection={“1”,“2”3“};var collect=newCollecton.Select(x=>int.Parse(x)).Where(y=>(newint[]{1,2,3}).ToList()包含(y));