1

全て...

NuGet と MVC 3 を使用した RavenDB 組み込みの最新の安定ビルドを使用しています。

    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;

それはうまくいきます。まず、長いlinq構文を使用するとラムダを使用すると失敗する理由がわかりません。私が本当に必要としているのは、並べ替え機能のあるグリッドを使用しているため、任意のフィールドで学生をフィルタリングすることです。Microsoft の System.Linq.Dynamic ファイルを使用して、文字列名で並べ替えたいと思います。これにより、並べ替えコレクションで渡されたフィールドで並べ替えることができます。

しかし、始める前に、自分のバージョンの RavenDB 組み込みでラムダ式を使用できない理由を理解する必要があると思います。誰でも助けることができますか?

4

1 に答える 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);
于 2012-09-27T13:58:15.780 に答える