C#程序中,现有Dataset ds 其中有数据如下:
序号     姓名     分数
1        张三     70
2        张三     80
3        李四     75
要想筛选出每个人最大分数的集合,应该在程序中怎么处理ds ,得到:1        张三     80
2        李四     75

解决方案 »

  1.   

    1楼的思路我知道。。但是怎么比较删除?能不能贴点小代码?看了DataSet事件和属性,没找到什么解决方法
      

  2.   

    用Filter 也只能筛选出符合条件的集合,如:=某个值,<某个值之类的。能对原数据进行比较后删选吗?
      

  3.   

    不能一下找出来。自己写。
    首先把记录取出来放到DataTable 里面。
    循环这个DataTable 
    每次都取第一行 里面的姓名信息 
    如果分数是数字类型的 就直接用 
    DataTable.Select("姓名='XXX'","分数DESC") 得到的DataRow 数组的第一个就是最大的分数。
    然后把姓名为XXXDataRow 从DataTable 中删除 dataTb.Rows.Remove(row); dataTb.AcceptChanges();如果分数部署数字类型的。就要自己每行比较。得出最大的。
      

  4.   

    class MaxEntity
        {
            public int score;
            public int number;
            public string name;
        }    class Program
        {
            static void Main(string[] args)
            {
                List<MaxEntity> list=new List<MaxEntity>();
                //首先把ds中的每个数据进行转换
                //转换成这样会比较简单,当然数据可能不止三条
                int[] score = new int[3] { 70, 80, 75 };
                int[] number = new int[3] {1,2,3 };
                string[] name = new string[3] {"张三","张三","李四" };            int tempMax=0;
                int sign = 0;            for (int i = 1; i < name.Length; i++)
                {
                    if (name[i] == name[i - 1])
                    {
                        if (score[i] > tempMax)
                        {
                            tempMax = score[i];
                            sign = i;
                        }
                    }
                    //到达另一个object
                    if(name[i]!=name[i-1])
                    {
                        //添加前一个object
                        MaxEntity me = new MaxEntity();
                        me.name = name[sign];
                        me.number = number[sign];
                        me.score = score[sign];
                        list.Add(me);                    tempMax = score[i];
                        sign = i;
                    }
                }
                MaxEntity me1 = new MaxEntity();
                me1.name = name[sign];
                me1.number = number[sign];
                me1.score = score[sign];
                list.Add(me1);
                //你需要的数据全部保存到list列表中,然后自己进行处理
                Console.ReadLine();
            }    }这段代码敲得不是很好了!
      

  5.   

    为何不在取数据的时候用存储过程算好了用个max 函数group by 下就ok了 
      

  6.   

    想到一个方法。。用datatable取DataSet数据,从第一个循环和后面的比较就是循环多了点,还得注意下DataTable的索引。效果还行,谢谢各位了。     
    顺便提下,原来的DataSet数据时查很多结构相同的表中的数据一行行填充进去的前面不好处理。。只能到这边处理了