当前位置:编程学习 > C#/ASP.NET >>

高手请进:泛类型 list orderby 排序问题


为什么中间的 tempDS.OrderBy(od1 => od1.Value); 没有实现排序呢?
      class orderData
        {
            public long? SId { get; set; }
            public string Label { get; set; }
            public double? Value { get; set; }
        }
        //Table排序
        void tableHeader_SortHanderEvent(object sender)
        {
            string strSortFieled = (sender as ITableContent).Text;

            List<orderData> tempDS = new List<orderData>();
            orderData od;
            SourceData.ToList().ForEach(s =>
            {
                od = new orderData();
                od.SId = s.id;
                DataItem ditem = s.dataItems.SingleOrDefault(di => di.XLabel==strSortFieled);
                od.Label = ditem.XLabel;
                od.Value = ditem.YValue;
                tempDS.Add(od);
            });

            //tempDS.OrderBy(od1 => od1.Value);    //为什么这里的排序是不成功的?未实现排序效果?

            List<Series> ts = new List<Series>();
            tempDS.ForEach(od2 =>
                ts.Add(SourceData.SingleOrDefault(s => s.id == od2.SId))
            );
            this.tableData.Clear();
            ts.ForEach(s => this.tableData.Add(s));
        }


为什么tempDS.OrderBy(od1 => od1.Value); 这里的排序是不成功的?
如果这里改成 用循环遍历tempDS,按照大小顺序排列,如何操作?

我用debug出来的数据格式如下:
SourceData.ToList().ForEach(s => { 
Debug.WriteLine(s.name);
 s.dataItems.ToList().ForEach(item => Debug.WriteLine(string.Format("XLabel:{0};YValue:{1}", item.XLabel, item.YValue)));
});

1,广告费
XLabel:2009-01;YValue:0
XLabel:2009-02;YValue:0
XLabel:2009-03;YValue:0
XLabel:2009-04;YValue:34400
XLabel:2009-05;YValue:0
XLabel:2009-06;YValue:
2,业务宣传费
XLabel:2009-01;YValue:210
XLabel:2009-02;YValue:12095.08
XLabel:2009-03;YValue:971.18
XLabel:2009-04;YValue:1062.32
XLabel:2009-05;YValue:896
XLabel:2009-06;YValue:
促销费
XLabel:2009-01;YValue:0
XLabel:2009-02;YValue:2000
XLabel:2009-03;YValue:5
XLabel:2009-04;YValue:5
XLabel:2009-05;YValue:
XLabel:2009-06;YValue:
客户服务费
XLabel:2009-01;YValue:0
XLabel:2009-02;YValue:0
XLabel:2009-03;YValue:0
XLabel:2009-04;YValue:0
XLabel:2009-06;YValue:0
XLabel:2009-05;YValue:
部门使用
XLabel:2009-01;YValue:1870.04
XLabel:2009-02;YValue:0
XLabel:2009-03;YValue:558.24
XLabel:2009-04;YValue:0
XLabel:2009-06;YValue:952
XLabel:2009-05;YValue:
促销赠送
XLabel:2009-01;YValue:10267.5
XLabel:2009-02;YValue:0
XLabel:2009-03;YValue:519.83
XLabel:2009-04;YValue:0
XLabel:2009-06;YValue:0
XLabel:2009-05;YValue:
业务招待费
XLabel:2009-01;YValue:19658
XLabel:2009-02;YValue:16239
XLabel:2009-03;YValue:14296
XLabel:2009-04;YValue:11480
XLabel:2009-05;YValue:11050
XLabel:2009-06;YValue:9550
卡类
XLabel:2009-01;YValue:0
XLabel:2009-02;YValue:0
XLabel:2009-03;YValue:300
XLabel:2009-04;YValue:350
XLabel:2009-05;YValue:450
XLabel:2009-06;YValue:850
礼品
XLabel:2009-01;YValue:4238.95
XLabel:2009-02;YValue:0
XLabel:2009-03;YValue:636
XLabel:2009-04;YValue:0
XLabel:2009-05;YValue:400
XLabel:2009-06;YValue:3038.78
--------------------编程问答-------------------- 实现以下IComparable借口 --------------------编程问答--------------------
引用 1 楼 lunasea0_0 的回复:
实现以下IComparable借口


高手请赐教! --------------------编程问答-------------------- 请高手指点哦! --------------------编程问答--------------------  
//tempDS.OrderBy(od1 => od1.Value);    //为什么这里的排序是不成功的?未实现排序效果? 
需要赋给新的list变量
修改为下面这句就可以了
List<orderData> tempDSNew = tempDS.OrderBy(od1 => od1.Value).ToList<orderData>();   --------------------编程问答-------------------- 因为Linq 中OrderBy是延迟性的,象select,where 都是的,只有当你需要该数据的时候(象for foreach),它才会执行语句
你可以使用ToList() 或ToArray(),Count()让它不延迟,马上执行,将结果保存在操作 --------------------编程问答--------------------
static void Main(string[] args)
{
    List<orderData> temp = new List<orderData>(new orderData[] { 
        new orderData() { Label = "a", Value = 5, SId = 1 }, 
        new orderData() { Label = "c", Value = 1, SId = 2 }, 
        new orderData() { Label = "b", Value = 7, SId = 3 } });
    temp = temp.OrderBy(t => t.Value).ToList();
    temp.ForEach(t => Console.WriteLine("SID : " + t.SId.ToString() + ", Label : " + t.Label + ", Value : " + t.Value.ToString()));
    Console.ReadKey();
}

class orderData
{
    public long? SId { get; set; }
    public string Label { get; set; }
    public double? Value { get; set; }

输出
SID : 2, Label : c, Value : 1
SID : 1, Label : a, Value : 5
SID : 3, Label : b, Value : 7


你的
tempDS.OrderBy(od1 => od1.Value);    
需要修改为
tempDS = tempDS.OrderBy(od1 => od1.Value).ToList();
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,