2

私はこのようなものを持っています:

Func<Thread, bool> tmpFunc = thread => true;
threads = Threads.Where(tmpFunc).(...)

さて、Threads.Where(thread => true).(...)すべてを行っても問題ありませんが、変数を使用すると.Where()アプリケーションがクラッシュします。なんで?私は何か間違ったことをしていますか?

さて、エラーを再現するコードは次のとおりです。

var threads = context.Categories
    .Where(c => c.Name == variable)
   .Select(c => new
   {
       threads = c.Threads
           .Where(tmpFunc)
           .OrderByDescending(t => t.DateCreated)
           .Skip(threadsToSkip)
           .Take(threadsPerPage)
           .Select(t => new
           {
               t,
               CategoryName = t.Category.Name,
               AuthorName = t.Author.UserName, 
               t.Posts.Count,
               LastPost = t.Posts
                   .OrderByDescending(post => post.DateCreated)
                   .Select(p => new{p.Author.UserName, p.DateCreated})
                   .FirstOrDefault()
            }),
            c.Threads.Count
    }).Single();

そして、それが私に与えるエラーは、内部.netフレームワークデータプロバイダーエラー1025です

4

3 に答える 3

3

私の仮定では、カスタムfuncからsqlへの変換はなく、関数はプロジェクションで使用されます。「...のSQL変換が存在しない」という例外が予想されますが。

これを修正するには、funcを次のように宣言してみてください。

Expression<Func<Thread, bool>> tmpFunc = thread => true;
threads = Threads.Where(tmpFunc).(...)
于 2013-01-06T17:58:18.820 に答える
3

直接Expressionではなく、を使用してみてください。Func

Expression<Func<Thread, bool>> tmpFuncExpr = thread => true;

Linq2Objectsに満足する一方でFunc、そうでLinq2Sqlはありません。

于 2013-01-06T17:59:04.087 に答える
2

Entity Framework を使用している場合、EF の IQueryable に渡されるすべての述語は、Expression<Func<>>.

この回答を確認してくださいstackoverflow.com/questions/11990158...

于 2013-01-06T18:09:34.093 に答える