1

誰かが助けてくれることを願っています。ASP.NET MVC 4 C# で jqGrid を実装しようとしています。列をソートしようとすると、次のエラーが発生し続けます。この列は、実際には外部キーを使用するオブジェクトのフィールドです。これを考慮してコードをどのように変更する必要があるかわかりません。グリッドは、外部キーからのフィールドではなく、使用しているモデル内のフィールドに対して正しくソートされます。代わりに ViewModel を使用する必要がありますか? Oleg の例のコードを使用しています。item.Name はオブジェクトであり、 item.Name.FullName は、以下のエラーをスローしているソートしようとしている列です。ありがとう!

ORDER BY ソート キーのタイプは、順序を比較できる必要があります。Near メンバー アクセス式、6 行目、3 列目。

public JsonResult DynamicGridData(string sidx, string sord, int page, int rows, bool search, string filters)
    {
        var context = new TeamContext();
        var objectContext = ((IObjectContextAdapter)context).ObjectContext;
        var set = objectContext.CreateObjectSet<Team>();

        var serializer = new JavaScriptSerializer();

        Filters f = (!search || string.IsNullOrEmpty(filters)) ? null : serializer.Deserialize<Filters>(filters);

        ObjectQuery<Team> filteredQuery =
        (f == null ? (ObjectQuery<Team>)set : f.FilterObjectSet((ObjectQuery<Team>)set));

        filteredQuery.MergeOption = MergeOption.NoTracking; // we don't want to update the data

        var totalRecords = filteredQuery.Count();

        var pagedQuery = filteredQuery.Skip("it." + sidx + " " + sord, "@skip",
                                            new ObjectParameter("skip", (page - 1) * rows))
                                     .Top("@limit", new ObjectParameter("limit", rows));

        // to be able to use ToString() below which does NOT exist in the LINQ to Entity
        var queryDetails = (from item in pagedQuery
                            select new { item.TeamId, item.Year, item.Name }).ToList();

        return Json(new
        {
            total = (totalRecords + rows - 1) / rows,
            page,
            records = totalRecords,
            rows = (from item in queryDetails
                    select new[] {
                                    item.TeamId.ToString(),
                                    item.Year,
                                    item.Name.FullName
                                }).ToList()
        });
    }
4

1 に答える 1

0

これは、さまざまな理由で失敗する可能性があります。

  • item.Name.FullName はデータベースのバイナリ フィールドですか?
  • アイテムを介して Name オブジェクトにアクセスするには、遅延読み込みを有効にする必要があります。よろしいですか?

とにかく、必要なデータのみを含むビューモデルを使用することは常に良い考えであり、データ アクセス レイヤーをコントローラーから分離する良い方法です。

于 2013-04-04T16:31:13.743 に答える