记录未被分类

时间:2014-04-11 11:14:01

标签: c# jquery sorting

我正在尝试在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 });

在发帖之前,我尝试了thisthis个例子,但没有一个有效。

为了澄清,我从excel文件中获取数据,以便List IEnumerable而非IQueryable正确?能否请您帮忙解决这个排序问题。提前谢谢。

编辑:这是更新后的代码;康拉德

  if (sorting != null)
  {
    daa.OrderBy(i => i.Date);
  }
    var result = daa.OrderBy(i => i.Date);

2 个答案:

答案 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()。有些看起来......不必要?无论如何,希望这可以帮助您解决问题。祝你好运。