C# Linq动态where子句查询以查找包含第一个字符的行是数字
我有以下代码来查找where子句以搜索在列的第一个字符上包含数字的行 如果您有解决方案,请回复。下面是代码结果,但只返回一行C# Linq动态where子句查询以查找包含第一个字符的行是数字,c#,entity-framework,linq,model-view-controller,dynamic,C#,Entity Framework,Linq,Model View Controller,Dynamic,我有以下代码来查找where子句以搜索在列的第一个字符上包含数字的行 如果您有解决方案,请回复。下面是代码结果,但只返回一行 var strs = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; query = query.Where("@0.Contains(Name.Substring(0,1))", strs); query = query.Where("Name.Substring(0,1).Conta
var strs = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
query = query.Where("@0.Contains(Name.Substring(0,1))", strs);
query = query.Where("Name.Substring(0,1).Contains(@0)", strs);
query = query.Where("Name.Contains(@0)", strs);
query.Where("Name.StartsWith(\"[0-9]\")");
您可以使用以下选项:
query = query.Where("@0.Contains(outerIt.Name.Substring(0, 1))", (object)strs);
有两个动态LINQ细节
首先,大多数动态方法的最后一个参数声明为params object[]values
,因此为了将字符串数组作为单个变量传递,需要将其强制转换为object
,否则,由于string[]
可强制转换为object[]
,它将作为变量传递
,@0
基本上是指strs[0]
其次,一旦您正确地传递了strs
,出于某种原因,您必须在Contains
方法中使用outerIt
来访问实体属性
另一种方法是去掉strs
数组,并使用以下标准:
query = query.Where("Name.Substring(0, 1) >= \"0\" and Name.Substring(0, 1) <= \"9\"");
query=query.Where(“Name.Substring(0,1)>=”0\”和Name.Substring(0,1)发布完整的代码,它到底在哪里返回一行?您是否尝试过从strs端接近它?将strs设置为字符串并使用strs.Contains(Name.Substring(0,1))?Sql查询是从中左侧(Name,1)的组织中选择名称('0'、'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9')从组织中选择名称,其中ISNUMERIC(左(名称,1))=1@TigOldBitties我正在使用System.Linq.Dynamic作为动态where条件,所有内容都在运行,非常感谢。它已被解决。在where子句中使用outerIt和(object):-)