可排序的jqGrid使用LINQ到MySQL(的DBLinq)和动态LINQ - ORDERBY不工作 [英] Sortable JqGrid using LINQ to MySQL (DbLinq) and Dynamic LINQ - Orderby doesn't work

查看:290
本文介绍了可排序的jqGrid使用LINQ到MySQL(的DBLinq)和动态LINQ - ORDERBY不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有问题,在jqGrid的排序项。排序依据似乎不起作用。我设置code断点,我注意到,那排序依据不改变元素的顺序。任何想法可能是错误的?

我使用LINQ与MySQL(项目的DBLinq)为SQL。

我的行动code:

 公众的ActionResult所有(字符串SIDX,串SORD,诠释页,诠释行)
        {
            。VAR门票= ZTRepository.GetAllTickets()排序依据(SIDX ++ SORD).ToList();
            VAR rowdata =(
                从门票票
                选择新{
                    I = ticket.ID,
                    电池=新的String [] {
                        ticket.ID.ToString(),ticket.Hardware,ticket.Issue,ticket.IssueDetails,ticket.RequestedBy,ticket.AssignedTo,ticket.Priority.ToString(),ticket.State
                    }
                })ToArray的()。            VAR jsonData =新
            {
                总= 1,//我们将在后面实现
                页=页,
                记录= tickets.Count(),
                行= rowdata
            };            返回JSON(jsonData,JsonRequestBehavior.AllowGet);
        }


解决方案

尝试使用以下

 公众的ActionResult所有(字符串SIDX,串SORD,诠释页,诠释行)
{
    IQueryable的<门票>库= ZTRepository.GetAllTickets();
    INT总记录= repository.Count();    //首先排序数据的IQueryable<门票>不转换了ToList()
    IQueryable的<门票> orderdData =库;
    System.Reflection.PropertyInfo的PropertyInfo =
        typeof运算(票).GetProperty(SIDX);
    如果(的PropertyInfo!= NULL){
        orderdData =的String.Compare(SORD递减,StringComparison.Ordinal)== 0?
            (从库点¯x
             排序依据propertyInfo.GetValue(X,NULL)降
             选择X):
            (从库点¯x
             排序依据propertyInfo.GetValue(X,NULL)
             选择X);
    }
    //如果你使用的字段,而不是属性,然后可以修改上面的code
    //为以下
    // System.Reflection.FieldInfo字段信息=
    // typeof运算(门票).GetField(SIDX);
    //如果(字段信息!= NULL){
    // orderdData =的String.Compare(SORD递减,StringComparison.Ordinal)== 0?
    //(从库点¯x
    //排序依据fieldInfo.GetValue(X,NULL)降
    //选择X):
    //(从库点¯x
    //排序依据fieldInfo.GetValue(X,NULL)
    //选择X);
    //}    结果//寻呼
    IQueryable的<门票> pagedData = orderdData
        .Skip((页大于0页面 - 1:0)*行?)
        。取(行);    //现在既排序和分页select语句是prepared
    //我们可以得到数据
    VAR rowdata =(从门票票
                    选择新{
                        ID = ticket.ID,
                        电池=新的String [] {
                            ticket.ID.ToString(),ticket.Hardware,ticket.Issue,
                            ticket.IssueDetails,ticket.RequestedBy,
                            ticket.AssignedTo,ticket.Priority.ToString(),
                            ticket.State
                        }
                    })了ToList()。    VAR jsonData = {新
        总=页面,
        记录=总记录,
        总=(总记录+行 - 1)/行
        行= pagedData
    };    返回JSON(jsonData,JsonRequestBehavior.AllowGet);
}

在这里,我想,您的机票对象的类型是票务

I've got problem with sorting entries in JqGrid. Orderby seem to not work. I set breakpoint in code and I noticed, that orderby doesn't change order of elements. Any idea what could be wrong?

I'm using LINQ to SQL with MySQL (DbLinq project).

My action code:

public ActionResult All(string sidx, string sord, int page, int rows)
        {
            var tickets = ZTRepository.GetAllTickets().OrderBy(sidx + " " + sord).ToList();
            var rowdata = (
                from ticket in tickets
                select new {
                    i = ticket.ID,
                    cell = new String[] {
                        ticket.ID.ToString(), ticket.Hardware, ticket.Issue, ticket.IssueDetails, ticket.RequestedBy, ticket.AssignedTo, ticket.Priority.ToString(), ticket.State
                    }
                }).ToArray();

            var jsonData = new
            {
                total = 1, // we'll implement later 
                page = page,
                records = tickets.Count(),
                rows = rowdata
            };

            return Json(jsonData, JsonRequestBehavior.AllowGet);
        }

解决方案

Try with the following

public ActionResult All(string sidx, string sord, int page, int rows)
{
    IQueryable<Ticket> repository = ZTRepository.GetAllTickets();
    int totalRecords = repository.Count();

    // first sorting the data as IQueryable<Ticket> without converting ToList()
    IQueryable<Ticket> orderdData = repository;
    System.Reflection.PropertyInfo propertyInfo =
        typeof(Ticket).GetProperty (sidx);
    if (propertyInfo != null) {
        orderdData = String.Compare(sord,"desc",StringComparison.Ordinal) == 0 ?
            (from x in repository
             orderby propertyInfo.GetValue (x, null) descending
             select x) :
            (from x in repository
             orderby propertyInfo.GetValue (x, null)
             select x);
    }
    // if you use fields instead of properties, then one can modify the code above
    // to the following
    // System.Reflection.FieldInfo fieldInfo =
    //         typeof(Ticket).GetField (sidx);
    // if (fieldInfo != null) {
    //  orderdData = String.Compare(sord,"desc",StringComparison.Ordinal) == 0 ?
    //      (from x in repository
    //       orderby fieldInfo.GetValue (x, null) descending
    //       select x) :
    //      (from x in repository
    //       orderby fieldInfo.GetValue (x, null)
    //       select x);
    //}

    // paging of the results
    IQueryable<Ticket> pagedData = orderdData
        .Skip ((page > 0? page - 1: 0) * rows)
        .Take (rows);

    // now the select statement with both sorting and paging is prepared
    // and we can get the data
    var rowdata = ( from ticket in tickets
                    select new {
                        id = ticket.ID,
                        cell = new String[] {
                            ticket.ID.ToString(), ticket.Hardware, ticket.Issue,
                            ticket.IssueDetails, ticket.RequestedBy,
                            ticket.AssignedTo, ticket.Priority.ToString(),
                            ticket.State
                        }
                    }).ToList();                

    var jsonData = new {
        total = page,
        records = totalRecords,
        total = (totalRecords + rows - 1) / rows,
        rows = pagedData
    };

    return Json(jsonData, JsonRequestBehavior.AllowGet);
}

Here I suppose that the type of your ticket object is Ticket.

这篇关于可排序的jqGrid使用LINQ到MySQL(的DBLinq)和动态LINQ - ORDERBY不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆