[c#]LINQ 动态查询以生成 'AssignedUser 是空'

标签: sql Linq Ado.net C#
发布时间: 2017/2/28 21:15:04
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想生成动态表达式查询,只能得到行已经为空的列

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);
}

感谢任何帮助

解决方法 1:

你的错误是因为你在你可以为 Null 的值。获取类型返回 Int32,即使该变量是一个可以为 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);
}
官方微信
官方QQ群
31647020