开发者

linq query order help

开发者 https://www.devze.com 2023-03-08 00:25 出处:网络
the following action method returns json data to my jqGrid as described in this article: using-jquery-grid-with-asp.net-mvc

the following action method returns json data to my jqGrid as described in this article:

using-jquery-grid-with-asp.net-mvc

my question is based on this linq query:

    var data = (
    from job in jobs
    select new
    {
      id = job.Id,
      cell = new List<string>() { job.Industry, job.OccupationName }
    }).ToArray();

Why are the cell list entries not ordered as expected? (Industry followed by OccupationName) :

What I expect is:


{"total":1400,"page":1,"records":7000,
"rows":[
{"id":"1","cell":{"Industry":"IT","OccupationName":"Administrator"}},
{"id":"2","cell":{"Industry":"IT","OccupationName":"Developer"}},
{"id":"4","cell":{"Industry":"IT","OccupationName":"Programmer"}}
]}

what i get is:


{"total":1400,"page":1,"records":7000,
"rows":[
{"id":"1","cell":{"Industry":"IT","OccupationName":"Administrator"}},
{"id":"2","cell":{"Industry":"Developer","OccupationName":"IT"}},
{"id":"4","cell":{"Industry":"IT","OccupationName":"Programmer"}}
]}

Thanks for any suggestions!

For clarity the whole action method:

    public ActionResult OccupationList(string sidx, string sord, int page, int rows)
    {
        using (var context = Service.EF.GetContext())
        {
            int pageIndex = Convert.ToInt32(page) - 1;
            int pageSize = rows;
            int totalRecords = context.sOccupations.Count();
            int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

            sidx = "it.[" + sidx + "]";

            var jobs = context.sOccupations
                .OrderBy(sidx + " " + sord)
                .Skip(pageIndex * pageSize)
                .Take(pageSize);

            var data = (
                  from job in jobs
                  select new
                  {
                      id = job.Id,
                      cell = new List<string>() { job.Industry, job.OccupationName }
                  }).ToArray();

            var jsonData = new
            {
                total = totalPages,
                page = page,
                records = totalRecords,
                rows = data
            };

            return Json(jsonData, JsonRequestBehavior.AllowGet);
        }
    }  

My current solution is a classic foreach statement- but I'm still wondering how to express this as a linq query

    IList<JsonRow> data = new List<JsonRow>();
    JsonRow jsonRow;
    foreach (var item in jobs)
    {
        jsonRow = new JsonRow();
        jsonRow.id = item.Id;
        jsonRow.cell = new string[2] { item.Industry, item.OccupationName };
        data.Add(jsonRow);
    }

    class JsonRow
    {
        public Guid id { get; set; }
        public string[] 开发者_JAVA技巧cell { get; set; }
    }


You'd have to order the "cell" as you like.

 var data = (
        from job in jobs
orderby job.OccupationName
        select new
        {
          id = job.Id,
          cell = new List<string>() { job.Industry, job.OccupationName }
        }).ToArray();

You will have to check the syntax, since I haven't tried to run it yet. Edit: I tried this, it should work.

0

精彩评论

暂无评论...
验证码 换一张
取 消