2012-09-27 47 views
1

所有...Ravendb拉姆達(排序依據)得到NotSupportedException異常

我使用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表達式。誰能幫忙?

+0

我已經回答了這個問題在*文本* - 但標題似乎完全不相干......(一樣asp.net-MVC -3) –

+0

我將最新的RavenDB嵌入到1.0.701中,看起來它不在那裏工作。 – Fred

+0

當我看着RavenDB結果時,AsyncDatabaseCommands屬性拋出了我所顯示的異常。這就是爲什麼我認爲這是RavenDB的一個問題。 – Fred

回答

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); 
+0

哇...多麼尷尬...謝謝你指出:) – Fred