将变量值分配给要传递给存储库方法的lambda表达式

时间:2013-01-03 16:57:13

标签: c# linq entity-framework lambda

首先,作为问题的一般概述,我正在编写一个MVC Web应用程序,需要根据几个不同的业务逻辑规则查询我的存储库。用户将首先在网页中输入文本,并在我的业务层中解析所述文本,并将相应的where子句查询发送到存储库。

所以,我的代码示例:

public Document GetDocuments(string txtFilter)
{
    string [] filterVals = // do some business logic here to parse txtFilter into the filterValsArray

    // filterQuery will utlimately contain the where clause for the repository
    Expression<Func<DocumentListViewModel, bool>> filterQuery = null;

    // case 1, when filterVals has only 1 value:
    if (filterVals[0].Length == 1)
    {
        filterQuery = x => x.SomeField == filterVals[0];
    }
    else // assign filterQuery to another set of expressions

    // repository call
    return _unitOfWork.DocumentRepository.Get(filterQuery);
}

当我运行它时,我得到一个运行时异常“无法调用非委托类型。”我相信正在发生的事情(当然,如果我对此错了,请纠正我)是实际表达式在存储库中枚举,此时filterVals不再在范围内。那么......有没有办法将这些值放入我的where子句表达式?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

尝试更改

    Expression<Func<DocumentListViewModel, bool>> filterQuery = null;

    Func<DocumentListViewModel, bool> filterQuery = null;

看看会发生什么。

答案 1 :(得分:0)

我假设您正在编译文档存储库中的表达式?如果不是,则需要在参数

上调用Compile()