1

まず、問題の一般的な概要として、いくつかの異なるビジネスロジックルールに基づいてリポジトリにクエリを実行する必要があるMVCWebアプリケーションを作成しています。ユーザーは最初に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句の式に取り込む方法はありますか?どんな助けでも大歓迎です。

4

2 に答える 2

1

変更してみる

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

    Func<DocumentListViewModel, bool> filterQuery = null;

そして何が起こるか見てください。

于 2013-01-03T17:14:58.220 に答える
0

ドキュメントリポジトリで式をコンパイルしていると思いますか?そうでない場合は、パラメーターでCompile()を呼び出す必要があります

于 2013-01-03T17:11:22.990 に答える