表达式> 在泛型方法中创建时会添加一个不需要的转换
本文关键字:添加 一个 转换 不需要 创建 Func bool 表达式 泛型方法 | 更新日期: 2023-09-27 17:57:19
我有一个函数来生成要在linq Where子句中使用的表达式。
public static Expression<Func<T,bool>> GetWhereCondition<T>() where T : IActive
{
return x => x.Active;
}
(注意 IActive 仅定义属性"活动")
还有其他相关的函数,这个想法是我可以将所需的条件注入到 Generic 类中以控制业务规则等。
问题是当我运行这个时,返回的表达式包含 lamda(从调试器中看到):
x => Convert(x).Active
这当然被 linq 拒绝了:"LINQ to Entities 仅支持强制转换实体数据模型基元类型。"
所以我的问题是...
如何防止这种行为。没有必要转换,显然这是不可取的。甚至有可能防止这种情况吗?
好吧,假设这只需要处理类(转换是针对装箱值类型),您可以添加一个class
约束:
public static Expression<Func<T, bool>> GetWhereCondition<T>() where T : class, IActive
{
return x => x.Active;
}
。转换消失了。
试试这个:
public static Expression<Func<T, bool>> GetWhereCondition<T>() where T : IActive
{
return x => x.Active;
}