8

我有一个函数来生成要在 linq Where 子句中使用的表达式。

public static Expression<Func<T,bool>> GetWhereCondition<T>() where T : IActive
{
    return x => x.Active;
}

(注意 IActive 只定义了属性 'Active')

还有其他相关功能,我的想法是我可以将所需的条件注入通用类来控制业务规则等。

问题是当我运行它时,返回的表达式包含 lamda(从调试器中看到):

x => Convert(x).Active

这当然被 linq 拒绝:“LINQ to Entities 仅支持强制转换实体数据模型原始类型。”

所以我的问题是......

我该如何防止这种行为。没有必要进行转换,显然这是不可取的。甚至有可能防止这种情况发生吗?

4

2 回答 2

10

好吧,假设这只需要使用类(转换用于装箱值类型),您可以添加一个class约束:

public static Expression<Func<T, bool>> GetWhereCondition<T>() where T : class, IActive
{
    return x => x.Active;
}

...并且转换消失了。

于 2013-02-01T16:17:28.610 回答
2

尝试这个:

public static Expression<Func<T, bool>> GetWhereCondition<T>() where T : IActive
{
    return x => x.Active;
}
于 2013-02-01T16:07:08.603 回答