linq query order help
the following action method returns json data to my jqGrid as described in this article:
using-jquery-grid-with-asp.net-mvcmy 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.
精彩评论