Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想将筛选器字符串从给定字符串(sql server支持的筛选器)格式转换为linq可接受的筛选器格式_C#_.net_Linq - Fatal编程技术网

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