Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将变量值分配给要传递给存储库方法的lambda表达式_C#_Linq_Entity Framework_Lambda - Fatal编程技术网

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

C# 将变量值分配给要传递给存储库方法的lambda表达式,c#,linq,entity-framework,lambda,C#,Linq,Entity Framework,Lambda,首先,作为对问题的总体概述,我正在编写一个MVC web应用程序,它需要根据几个不同的业务逻辑规则查询我的存储库。用户将首先在网页中输入文本,然后在我的业务层中解析所述文本,并将相应的where子句查询发送到存储库 因此,以我的代码为例: public Document GetDocuments(string txtFilter) { string [] filterVals = // do some business logic here to parse txtFilter into

首先,作为对问题的总体概述,我正在编写一个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);
}
公共文档GetDocuments(字符串txtFilter)
{
string[]filterVals=//在此处执行一些业务逻辑,将txtFilter解析为filterVals数组
//filterQuery将包含存储库的where子句
表达式filterQuery=null;
//情况1,当filterVals只有1个值时:
if(filterVals[0]。长度==1)
{
filterQuery=x=>x.SomeField==filterVals[0];
}
else//将filterQuery分配给另一组表达式
//存储库调用
return _unitOfWork.DocumentRepository.Get(filterQuery);
}

当我运行它时,我得到一个运行时异常“Cannotinvokeannon-delegate type”。我认为正在发生的是(如果我在这一点上有错误,请纠正我),实际表达式在存储库中枚举,此时filterVals不再在范围内。所以有没有办法将这些值放入我的where子句表达式中?任何帮助都将不胜感激。

我想您正在文档库中编译表达式?如果不是,则需要对参数调用Compile()我假设您正在文档存储库中编译表达式?如果没有,则需要对参数调用Compile()

尝试更改

    Expression<Func<DocumentListViewModel, bool>> filterQuery = null;
表达式过滤器查询=null;

Func filterQuery=null;
看看会发生什么。

试着改变一下

    Expression<Func<DocumentListViewModel, bool>> filterQuery = null;
表达式过滤器查询=null;

Func filterQuery=null;

看看会发生什么。

@Fox先生:哦,对不起,今天早上很累。我现在已经解决了我的问题,谢谢你指出这点。@Fox先生:哦,对不起,今天早上很累。我现在已经解决了我的问题,感谢您指出这一点。或者,请致电
Compile
。)或者,在不需要的时候不要使用表达式好吧,这太尴尬了,但我承认。我确实改变了一些我所学到的东西,我给了昆顿答案,但事实上是这样的。在我的实际控制器方法中,我是在做:返回视图包(文档),而不是返回视图(文档)。是的,很尴尬。或者,对它们调用
Compile
。)或者,在不需要的时候不要使用表达式好吧,这太尴尬了,但我承认。我确实改变了一些我所学到的东西,我给了昆顿答案,但事实上是这样的。在我的实际控制器方法中,我是在做:返回视图包(文档),而不是返回视图(文档)。是啊,很尴尬。