【发布时间】:2021-07-05 06:58:00
【问题描述】:
我有下面的 LINQ 表达式,我需要将 Contains 设为不区分大小写,尝试了不同的方法,但它们都不起作用
ParameterExpression paramExpr = Expression.Parameter(typeof(EmployeeEntity));
var propertyName = Expression.Property(paramExpr, "EmpName");
//for type convertion start
var propertyType = ((PropertyInfo)propertyName.Member).PropertyType;
var converter = TypeDescriptor.GetConverter(propertyType);
if (!converter.CanConvertFrom(typeof(string)))
throw new NotSupportedException();
var propertyValue = converter.ConvertFromInvariantString("john");
var constant = Expression.Constant(propertyValue);
var valueExpression = Expression.Convert(constant, propertyType);
//for type convertion ends
MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var someValue = Expression.Constant(propertyValue, typeof(string));
var finalExpression = Expression.Call(propertyName, method, someValue);
在我的表中,EmpName 是“John”,但我上面的查询将返回零行,所以如何使上面的查询不区分大小写。
【问题讨论】:
-
您使用的是什么数据库?但无论如何您都可以在您的属性上生成
ToLower()调用。 -
@HimBromBeere 不确定这是否会由 EF 翻译。
-
您使用哪个版本的 EF?对于 EF 核心,请参阅:stackoverflow.com/questions/43277868/…
-
@GuruStron:我正在使用 MS SQL,我尝试使用 ToLower,但我没有得到确切的语法,你能否提供我上面示例的确切语法
标签: c# entity-framework linq comparison expression