C# 未对记录进行排序

C# 未对记录进行排序,c#,jquery,sorting,C#,Jquery,Sorting,我试图在jQueryJTable中对记录进行排序,但它没有对记录进行排序。我正在从excel文件中获取记录 下面是我试图对记录进行排序的代码的排序位: if (sorting != null) { daa.OrderByDescending(i => i.Date); } 以下是我的完整代码供您检查: public JsonResult TopPlayedInVenueList1(string sorting, string StartDate = "", string EndDate

我试图在jQueryJTable中对记录进行排序,但它没有对记录进行排序。我正在从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 });
此电话:

daa.OrderBy(i => i.Date);
不要就地排序数据,必须将结果保存到另一个变量中:

var result = daa.OrderBy(i => i.Date);
此电话:

daa.OrderBy(i => i.Date);
不要就地排序数据,必须将结果保存到另一个变量中:

var result = daa.OrderBy(i => i.Date);
此电话:

daa.OrderBy(i => i.Date);
不要就地排序数据,必须将结果保存到另一个变量中:

var result = daa.OrderBy(i => i.Date);
此电话:

daa.OrderBy(i => i.Date);
不要就地排序数据,必须将结果保存到另一个变量中:

var result = daa.OrderBy(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"))
                };

                //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 });

我会花一点时间仔细检查,确保您实际上也需要所有这些ToList()。有些看起来…不必要?无论如何,希望这能帮助你解决问题。祝你好运。

你在代码中所做的需要注意:

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 });

我会花一点时间仔细检查,确保您实际上也需要所有这些ToList()。有些看起来…不必要?无论如何,希望这能帮助你解决问题。祝你好运。

你在代码中所做的需要注意:

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 });

我会花一点时间仔细检查,确保您实际上也需要所有这些ToList()。有些看起来…不必要?无论如何,希望这能帮助你解决问题。祝你好运。

你在代码中所做的需要注意:

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 });


我会花一点时间仔细检查,确保您实际上也需要所有这些ToList()。有些看起来…不必要?无论如何,希望这能帮助你解决问题。祝你好运。

谢谢-我尝试了你的建议,但没有成功。我已经用你的代码更新了我的帖子。如果(排序!=null){daa=daa.OrderBy(I=>I.Date);}?我已经在顶部定义了
daa
列表
变量,所以它不会接受它。默认情况下,它会对表进行排序(ASC/DESC),这很好,但是当单击表标题对列进行排序时,它什么也不做。谢谢-我尝试了您的建议,但没有成功。我已经用你的代码更新了我的帖子。如果(排序!=null){daa=daa.OrderBy(I=>I.Date);}?我已经在顶部定义了
daa
列表
变量,所以它不会接受它。默认情况下,它会对表进行排序(ASC/DESC),这很好,但是当单击表标题对列进行排序时,它什么也不做。谢谢-我尝试了您的建议,但没有成功。我已经用你的代码更新了我的帖子。如果(排序!=null){daa=daa.OrderBy(I=>I.Date);}?我已经在顶部定义了
daa
列表
变量,所以它不会接受它。默认情况下,它会对表进行排序(ASC/DESC),这很好,但是当单击表标题对列进行排序时,它什么也不做。谢谢-我尝试了您的建议,但没有成功。我已经用你的代码更新了我的帖子。如果(排序!=null){daa=daa.OrderBy(I=>I.Date);}?我已经在顶部定义了
daa
列表
变量,所以它不会接受它。默认情况下,它会对表进行排序(ASC/DESC),这很好,但是当单击表标题对列进行排序时,它不会做任何事情。首先,感谢您抽出时间编写代码并帮助我。您的代码更有意义,更易于理解,因为我对C#还相当陌生。我尝试了您的代码,但它给出了以下错误
此行已存在显式转换
newlist=listOrder.OrderByDescending(I=>I.Date)我已经用你的代码更新了上面的代码供你检查,再次感谢你:)还有@Mike,我默认按行排序,这很好。。但是,当我单击表标题时,它不会对列进行排序。单击时,排序箭头会上下移动,但数据保持不变。。再次感谢您的时间、努力和帮助:)好的,我还没有测试过这段代码。我猜(这有点可笑)您需要在末尾添加.ToList()。我会用这个更新我的帖子。你的第二个评论很难理解。第1步是验证此函数是否按照您想要的顺序返回列表。如果这是真的,那么问题不在这里,而是在你看来。很抱歉,我不清楚,我可以对列进行排序,但标题排序不起作用。再一次为混淆感到抱歉。首先感谢您抽出时间来处理代码并帮助我解决问题。您的代码更有意义,更易于理解,因为我对C#还相当陌生。我尝试了您的代码,但它给出了以下错误
此行已存在显式转换
newlist=listOrder.OrderByDescending(I=>I.Date)我已经用你的代码更新了上面的代码供你检查,再次感谢你:)还有@Mike,我默认按行排序,这很好。。但是,当我单击表标题时,它不会对列进行排序。单击时,排序箭头会上下移动,但数据保持不变。。再次感谢您的时间、努力和帮助:)好的,我还没有测试过这段代码。我猜(这有点可笑)您需要在末尾添加.ToList()。我会用这个更新我的帖子。你的第二个评论很难理解。第1步是验证此函数是否按照您想要的顺序返回列表。如果这是真的,那么问题不在这里,而是在你看来。很抱歉,我不清楚,我可以对列进行排序,但标题排序不起作用。再次抱歉