我正在动态构建查询,但在实现NOT LIKE个查询时遇到了问题. 我的LIKE看起来是这样的:

case "LIKE":
{
    var memberTypeConverter = TypeDescriptor.GetConverter(member.Type);
    var constant = Expression.Constant(value == null ? null : memberTypeConverter.ConvertFrom(value.ToString()!), member.Type);

    body = Expression.Call(
        typeof(DbFunctionsExtensions),
        nameof(DbFunctionsExtensions.Like),
        Type.EmptyTypes,
        Expression.Property(null, typeof(EF), nameof(EF.Functions)),
        member,
        constant
    );
    break;
}

这是可行的,但沿着这条线没有DbFunctionsExtensions.NotLike或更多的东西,我不确定如何否定Like.

我试着用了IsFalse左右的东西,但没有奏效.

body = Expression.IsFalse(Expression.Call(
                        typeof(DbFunctionsExtensions),
                        nameof(DbFunctionsExtensions.Like),
                        Type.EmptyTypes,
                        Expression.Property(null, typeof(EF), nameof(EF.Functions)),
                        member,
                        constant
                        )`
...

如何获得计算结果为NOT LIKE查询的表达式? 我怎么能在一张普通的Queryable上写NOT LIKE呢?

推荐答案

您只需将表达式括在Expression.Not中即可反转逻辑.因此,可能是这样的:

...

body = Expression.Call(
    typeof(DbFunctionsExtensions),
    nameof(DbFunctionsExtensions.Like),
    Type.EmptyTypes,
    Expression.Property(null, typeof(EF), nameof(EF.Functions)),
    member,
    constant
);

body = Expression.Not(body); // <--- Add this

Csharp相关问答推荐

C#中的Valkey缓存

C#中的两个列表中的元素加/减/乘/除操作

SortedSet.IsSubsetOf未按预期工作

Monty Hall游戏节目模拟给我50/50的结果

ASP.NET核心结果.文件vs结果.流

ASP.NET MVC中创建视图的过滤器

为什么我的ASP.NET核心MVC应用程序要为HTML元素添加一些标识符?

内部接口和类的DI解析

无法通过绑定禁用条目

共享暂存/生产环境中Azure事件中心的建议配置

当前的文化决定了错误的文化

Blazor Web App WASM的两个独立项目令人困惑

C#Null判断处理失败

使用带有参数和曲面的注入失败(&Q;)

TagHelpers在新区域不起作用

VS 2022与VS 2019:如何/为什么创建额外的任务?

发布.NET 8 Blazor WebAssembly独立应用程序以进行静态站点部署

映射器-如何映射到多个实体

如何阻止可传递依赖项出现在项目中

如何将行添加到DataGrid以立即显示它?