首页 文章

Ravendb Lambda(OrderBy)获得NotSupportedException

提问于
浏览
1

所有...

我正在使用RavenDB嵌入式,使用NuGet和MVC 3进行最新的稳定构建 .

public JsonResult GetStudents(GridFilter filter)
    {
        using (var session = _store.OpenSession())
        {
            var students = session.Query<Student>();
            students.OrderBy(x => x.FirstName);

            return Json(students.ToList());
        }
    }

这段代码不会破坏 . 它也不会对Student.FirstName进行排序 . 我查看了RavenQueryInspector(将鼠标放在学生集合上)并找到了以下内容......

AsyncDatabaseCommands = '(((Raven.Client.Linq.RavenQueryInspector<UMA.KendoGrid.Entities.Student>)(students))).AsyncDatabaseCommands' threw an exception of type 'System.NotSupportedException'

如果我做

var students = from x in session.Query<Student>()
        orderby x.FirstName descending
        select x;

工作正常 . 首先,我不明白为什么在使用long linq语法时使用lambda会失败 . 我真正需要的是过滤任何领域的学生,因为我正在使用具有排序能力的网格 . 我想使用Microsoft的System.Linq.Dynamic文件按字符串名称排序,这样我可以按排序集合中传递的任何字段进行排序 .

但是,要开始,我想我需要弄清楚为什么我的RavenDB嵌入式版本不允许我使用lambda表达式 . 有人可以帮忙吗?

1 回答

  • 6

    在此声明中:

    students.OrderBy(x => x.FirstName);
    

    ......你忽略了通话的结果 . 这是LINQ等同于“忽略字符串调用的结果”错误:

    text.Substring(5, 10);
    

    LINQ调用永远不会改变它们被调用的内容 - 它们返回一个具有适当转换的新集合 . 所以你要:

    students = students.OrderBy(x => x.FirstName);
    

    或更好:

    var students = session.Query<Student>.OrderBy(x => x.FirstName);
    

相关问题