EF Core表达式树中如何实现NOT LIKE查询?
如何在EF中动态构建NOT LIKE表达式?
动态表达式构建方案
你可以通过Expression.Not方法对DbFunctionsExtensions.Like的结果取反,实现等价于NOT LIKE的逻辑,无需使用IsFalse。修改后的代码如下:
case "NOT LIKE": { var memberTypeConverter = TypeDescriptor.GetConverter(member.Type); var constant = Expression.Constant(value == null ? null : memberTypeConverter.ConvertFrom(value.ToString()!), member.Type); // 先构建LIKE逻辑的表达式 var likeExpression = Expression.Call( typeof(DbFunctionsExtensions), nameof(DbFunctionsExtensions.Like), Type.EmptyTypes, Expression.Property(null, typeof(EF), nameof(EF.Functions)), member, constant ); // 对LIKE结果取反,得到NOT LIKE逻辑 body = Expression.Not(likeExpression); break; }
普通Queryable中的NOT LIKE写法
在常规Queryable查询里,直接用逻辑非运算符!对EF.Functions.Like的结果取反即可:
// 示例:查询Name不包含"test"的实体 var query = dbContext.Entities.Where(x => !EF.Functions.Like(x.Name, "%test%"));
内容的提问来源于stack exchange,提问作者sommmen
相关产品推荐
相关产品推荐

