接口表达式<func <t,bool =“”>&gt;给出&#34;无法解析符号语言&#34; </func <t,>

时间:2015-01-24 18:45:01

标签: c# lambda compiler-errors mocking expression

我有一些代码,我正在重构依赖于接口,以便我可以注入依赖项和单元测试/模拟依赖项。

简化时,原始代码看起来像这样:

private Expression<Func<SearchResultItem, bool>> AddFilterByLanguage(Expression<Func<SearchResultItem, bool>> query)
{
        Expression<Func<SearchResultItem, bool>> languageQuery = PredicateBuilder.False<SearchResultItem>();

        languageQuery = languageQuery.Or(i => i.Language == _searchParams.ContextLanguage);

        return query.And(languageQuery);
}

要对此代码进行单元测试,我的计划是添加使用PredicateBuilder和Expression的假实现,以便我可以构建一个虚拟查询并验证相关部分是否被正确调用。

所以我用一个注入的IPredicateBuilder替换了PredicateBuilder,它返回IExpressions而不是如下定义。

public interface IPredicateBuilder
{
    IExpression<Func<T, bool>> True<T>();
    IExpression<Func<T, bool>> False<T>();
}

public interface IExpression<T> 
{
    IExpression<Func<T, bool>> And<T>(IExpression<Func<T, bool>> func);
    IExpression<Func<T, bool>> Or(IExpression<Func<T, bool>> func);
}

现在更改的代码如下所示:

private IExpression<Func<SearchResultItem, bool>> AddFilterByLanguage(Expression<Func<SearchResultItem, bool>> query)
{
        IExpression<Func<SearchResultItem, bool>> languageQuery = _predicateBuilder.False<SearchResultItem>();

        languageQuery = languageQuery.Or(i => i.Language == _searchParams.ContextLanguage);

        return query.And(languageQuery);
}

其中

private readonly IPredicateBuilder _predicateBuilder;

我的问题是我在这一行得到了“无法解析符号语言”:

languageQuery = languageQuery.Or(i => i.Language == _searchParams.ContextLanguage);

任何关于如何最好地解决这个问题的建议都将受到赞赏。

0 个答案:

没有答案