2

正常に機能する前に、同じクエリを使用していました。次に、コンパイル済みクエリを使用することにしました。そのため、コードにいくつかの変更を加える必要がありました。

コードを実行しようとすると、「サポートされていないオーバーロードがクエリ演算子 'Where' に使用されています。"approvalHelper.GetWhereClauseForApprovalSimpleSearch();" から生成した where 句」というエラー メッセージが表示されます。私のコードに示されているように、コンパイルされたクエリ部分でのみ機能しません

コード:

// Complied Query Class
public static class CompliedQuery
{

    public static Func<GDataContext, Expression<Func<View_ApprovalSimple, bool>>, IQueryable<View_ApprovalSimple>> getApprovalSimple =


    CompiledQuery.Compile<GDataContext, Expression<Func<View_ApprovalSimple, bool>>, IQueryable<View_ApprovalSimple>>(
           (db, whereclause) => (from results in db.View_ApprovalSimples.AsExpandable().Where(whereclause)
                                select results));        
}

// this is what is passed into the where clause; Body = {(vas.siteId = 1)}


//the Calling code
public static List<View_ApprovalSimple> GetApprovalSimple(ApprovalsSearchHelperClass _approvalHelper)
{
    Expression<Func<View_ApprovalSimple, bool>> whrClause = approvalHelper.GetWhereClauseForApprovalSimpleSearch();

    //whrclause; Body = {(vas.siteId = 1)}
    try
    {
        using (GDataContext db = new GDataContext())
        {
            if (whrClause != null)
            {
                var varResults = CompliedQuery.getApprovalSimple(db, whrClause);

                return varResults.ToList();
            }
        }  
    }
    catch (Exception ex)
    {
        // code to handle error        
    }
    finally
    {          
    }

    return null;    
}

どのような新しい変更を実装する必要があるか考えていますか?

前もって感謝します。

4

2 に答える 2

0

CompliedQuery呼び出し元のクラスに名前空間を確認します (最初は からすべてをコピーします)。

于 2013-02-01T10:53:30.237 に答える
0

最初はこれについて少し懐疑的で、オプションが不足していたので、最終的に試してみたところ、うまくいきました. 回答を見るにはリンクをたどってください Steve's Blog すばらしい仕事をしています。

于 2013-02-04T02:35:32.917 に答える