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

我的假设是没有自定义函数到 sql 的翻译,并且函数在投影中使用。虽然我希望“不存在...的 sql 翻译”异常。

要解决此问题,您可以尝试将您的 func 声明为

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

尝试使用 anExpression而不是Func直接:

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

虽然Linq2Objects会对 感到满意,但Func不会Linq2Sql

于 2013-01-06T17:59:04.087 回答
2

当您使用实体框架时,任何传递给 EF 的 IQueryable 的谓词都必须是Expression<Func<>>.

检查这个答案stackoverflow.com/questions/11990158 ...

于 2013-01-06T18:09:34.093 回答