LINQ 动态查询,用于生成“其中分配的用户为空”

本文关键字:分配 用户 查询 动态 用于 LINQ | 更新日期: 2023-09-27 18:34:31

我正在尝试构建动态表达式查询以仅获取列中具有 null 的行

where AssignedUser is null

下面是我的代码,但它没有达到我的预期。请问任何人都可以在这个问题上传播光芒吗?

private Expression<Func<VwAssignmentActivities, bool>> GetIsNullExpressionEquals<T>(string propName, T value)
{
    var item = Expression.Parameter(typeof(VwAssignmentActivities), "item");
    var prop = Expression.Convert(Expression.Property(item, propName), value.GetType());
    Expression body = Expression.Equal(prop, Expression.Constant(null, prop.Type));
    return Expression.Lambda<Func<VwAssignmentActivities, bool>>(body, item);
}

任何帮助表示赞赏

LINQ 动态查询,用于生成“其中分配的用户为空”

您得到的错误是因为您的 Nullable 中有一个值。get 类型返回 Int32,即使变量可为 Null。然后,您正在尝试将 null 转换为 int。

假设你只关心查找空值,我会做这样的事情

public Type GetNullable(Type type)
{
    if (type == typeof(Nullable<>))
        return  type.GetType();
        
    if(type == typeof(int))
        type = typeof(int?);
    else if(type == typeof(bool))
        type = typeof(bool?);
    else if(type == typeof(float))
        type = typeof(float?);      
    // etc. you  will have to build out every type you want.
    
    return type;
}
public Expression<Func<VwAssignmentActivities, bool>> GetIsNullExpressionEquals(
    string propName, Type value)
{       
    var item = Expression.Parameter(typeof(VwAssignmentActivities), "item");
    var prop = Expression.Convert(Expression.Property(item, propName), 
        GetNullable(value));
    
    Expression body = Expression.Equal(prop, Expression.Constant(null, 
       prop.Type));
    
    return Expression.Lambda<Func<VwAssignmentActivities, bool>>(body, item);
}