我正在尝试在jQuery jTable中对记录进行排序,但它没有对记录进行排序。我从excel文件中获取记录。
这是我尝试对记录进行排序的代码的排序位:
if (sorting != null)
{
daa.OrderByDescending(i => i.Date);
}
这是我检查的完整代码:
public JsonResult TopPlayedInVenueList1(string sorting, string StartDate = "", string EndDate = "", int jtStartIndex = 0, int jtPageSize = 0, string jtSorting = null)
{
try
{
if (Request.IsAuthenticated == true)
{
string Path = @"C:\\5Newwithdate-1k.xls";
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= '" + Path + "';Extended Properties=" + (char)34 + "Excel 8.0;IMEX=1;" + (char)34 + "");
OleDbDataAdapter da = new OleDbDataAdapter("select * from [Sheet1$]", con);
con.Close();
System.Data.DataTable data = new System.Data.DataTable();
da.Fill(data);
List<TopPlayed> daa = new List<TopPlayed>();
foreach (DataRow p in data.Rows)
{
TopPlayed top = new TopPlayed()
{
TrackID = Convert.ToInt32(p.Field<double>("TrackID")),
Date = p.Field<DateTime>("DateTimes"),
TrackName = p.Field<string>("TrackName"),
ArtistName = p.Field<string>("ArtistName"),
Times = Convert.ToInt32(p.Field<double>("Times"))
};
daa.Add(top);
}
var listOrder = daa.Where(i => i.Date >= Convert.ToDateTime(StartDate) && i.Date <= Convert.ToDateTime(EndDate)).ToList();
var newlist = listOrder.ToList().GetRange(jtStartIndex, jtPageSize);
if (!string.IsNullOrWhiteSpace(sorting))
{
newlist = listOrder.OrderByDescending(i => i.Date);
}
return Json(new { Result = "OK", Records = newlist, TotalRecordCount = listOrder.ToList().Count });
在发帖之前,我尝试了this和this个例子,但没有一个有效。
为了澄清,我从excel文件中获取数据,以便List
IEnumerable
而非IQueryable
正确?能否请您帮忙解决这个排序问题。提前谢谢。
编辑:这是更新后的代码;康拉德
if (sorting != null)
{
daa.OrderBy(i => i.Date);
}
var result = daa.OrderBy(i => i.Date);
答案 0 :(得分:2)
这个电话:
daa.OrderBy(i => i.Date);
不对数据就地排序,您必须将结果保存到另一个变量中:
var result = daa.OrderBy(i => i.Date);
答案 1 :(得分:1)
您在代码中所做的事情需要一些关注:
public JsonResult TopPlayedInVenueList1(string sorting, string StartDate = "", string EndDate = "", int jtStartIndex = 0, int jtPageSize = 0, string jtSorting = null)
{
try
{
if (Request.IsAuthenticated == true)
{
string Path = @"C:\\5Newwithdate-1k.xls";
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= '" + Path + "';Extended Properties=" + (char)34 + "Excel 8.0;IMEX=1;" + (char)34 + "");
OleDbDataAdapter da = new OleDbDataAdapter("select * from [Sheet1$]", con);
con.Close();
System.Data.DataTable data = new System.Data.DataTable();
da.Fill(data);
List<TopPlayed> daa = new List<TopPlayed>();
foreach (DataRow p in data.Rows)
{
TopPlayed top = new TopPlayed()
{
TrackID = Convert.ToInt32(p.Field<double>("TrackID")),
Date = p.Field<DateTime>("DateTimes"),
TrackName = p.Field<string>("TrackName"),
ArtistName = p.Field<string>("ArtistName"),
Times = Convert.ToInt32(p.Field<double>("Times"))
};
//Don't sort inside your foreach!
//if (sorting != null)
//{
// daa.OrderBy(i => i.Date);
//}
daa.Add(top);
}
//var listOrder = daa.OrderBy(i => i.Date).ToList().Where(i => i.Date >= Convert.ToDateTime(StartDate) && i.Date <= Convert.ToDateTime(EndDate));
//Don't run a Where after Orderby, probably you're fine...but not sure its guaruanteed, oh and you probably don't want to sort here either
//I'm also a little surprised that the Convert statements in there aren't causing runtime errors..
var listOrder = daa.Where(I => i.Date >= Convert.ToDateTime(StartDate) && i.Date <= Convert.ToDateTime(EndDate)).ToList();
//you don't need to convert .ToList() to get .Count
if (jtStartIndex + 150 > listOrder.ToList().Count)
{
int val = listOrder.ToList().Count - jtStartIndex;
jtPageSize = val;
}
//This is the list that you actually return. This is where you sort your list
var newlist = listOrder.OrderBy(i => i.Date).ToList().GetRange(jtStartIndex, jtPageSize);
return Json(new { Result = "OK", Records = newlist, TotalRecordCount = listOrder.ToList().Count });
如果我不得不猜测,你的问题是你在大约四个不同的地方进行排序,你的排序正常,但你只是在最后重新排序,所以你认为&# 39;不工作仅在一个位置排序。如果它还没有工作,只需在那里放一个断点并自己查看清单,看看它是否排序。应该很容易搞清楚。
从你的代码中弄清楚有点困难,但在最底层,这似乎是你想要的(此时不确定你是想通过降序还是升序排序,这是下降的) :
var newlist = listOrder.ToList().GetRange(jtStartIndex, jtPageSize);
if(!string.IsNullOrWhiteSpace(sorting))
{
newlist = newlist.OrderByDescending(o => o.Date).ToList();
}
我需要花一点时间来确保你确实需要那里的所有ToList()。有些看起来......不必要?无论如何,希望这可以帮助您解决问题。祝你好运。