我有一个函数可以生成要在 linq Where 子句中使用的表达式。
public static Expression<Func<T,bool>> GetWhereCondition<T>() where T : IActive
{
return x => x.Active;
}
(注意 IActive 只定义属性 'Active')
还有其他相关的功能,我的想法是我可以将所需的条件注入(inject)到通用类中以控制业务规则等。
问题是当我运行它时,返回的表达式包含 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;
}
...然后转换就消失了。
关于c# - Expression<Func<T,bool>> 在泛型方法中创建时添加不需要的 Convert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650234/