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);
}
任何帮助表示赞赏
您得到的错误是因为您的 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);
}