表结构如下:
id(自增) ownerid     infor     date
1        1 啊范德萨 2008-10-10
2        1 撒旦法 2008-10-12
3 1 adsfsa1 2008-10-15
4 2 asdfsa1 2008-10-12
5 2 sdfsa2 2008-10-15
6 3 sdfas3 2008-10-20
7 3 sdfsa4 2008-10-12
8 3 dsdfsa4 2008-10-18
9 4 sdfsa555 2008-10-14
10 5 sdaf 2008-10-19
11 6 sfdsa 2008-10-22
12 6 sdafsadfsaf 2008-10-12
13 6 sdfsaf 2008-10-20
14 7 sadfsa 2008-10-14
15 7 sdfas 2008-10-12
16 8 sdfas 2008-10-9像这个表的结构,我现在需要取出数据这样循环显示:
id(自增) ownerid     infor     date
3 1 adsfsa1 2008-10-15
5 2 sdfsa2 2008-10-15
6 3 sdfas3 2008-10-20
9 4 sdfsa555 2008-10-14
10 5 sdaf 2008-10-19
11 6 sfdsa 2008-10-22
14 7 sadfsa 2008-10-14
16 8 sdfas 2008-10-9 (第一轮完毕,按ownerid分组取每个分组的max(date))
2        1 撒旦法 2008-10-12
4 2 asdfsa1 2008-10-12
8 3 dsdfsa4 2008-10-18
13 6 sdfsaf 2008-10-20
15 7 sdfas 2008-10-12 (第二轮显示完毕)
1        1 啊范德萨 2008-10-10
7 3 sdfsa4 2008-10-12
12 6 sdafsadfsaf 2008-10-12 (所有数据取完)
可以使用list<> 数据列表。请指导...

解决方案 »

  1.   

    一样的按date最后发布日期,只是要去除先前第一轮出现过的数据。
      

  2.   

    我不知道你说的List<T>显示是什么意思
    是不是先用List存储第一次循环的,第二次循环时添加到List的时候要去掉第一次出现过的?
    List<数据类型> list = new List<数据类型>();
    if(!list.Exists(new Predicate<数据类型>(delegate(数据类型 obj){return obj.条件字段==比较字段;})))
    {
       //添加没有出现过的
    }
      

  3.   

    wangping_li 所说也可以这么理解,只是不晓得复杂不?如果有更好的办法,请指教
      

  4.   

    -->一样的按date最后发布日期,只是要去除先前第一轮出现过的数据。可以把先前一轮查询出的ID连接成一个字符串,如3,5,6,9,10...
    然后第二轮查询的时候 条件中加 not in (3,5,6,9,10...)
      

  5.   

    三层结构中支持这样查询吗?能先取出所有项list<>然后分取索引来排不?
    希望能给出个有代码的解决方案。
      

  6.   


        //MyData是我按照楼主的表自定义的类
        //以下用Linq实现
            private void button1_Click(object sender, EventArgs e)
            {
                List<MyData> dt = new List<MyData>();
                var totalData = from oneItem in dt
                            group oneItem by oneItem.ownerid into g
                            orderby g.Key
                            select g;
                List<MyData> first = new List<MyData>();//第一次循环
                int count = 0;//记录元素最多的组的元素个数
                foreach (var g in totalData)
                {
                    var query = from oneItem in g
                                orderby oneItem.date descending
                                select oneItem;
                    MyData md = query.Take(1).Single();
                    count = query.Count() > count ? query.Count() : count;
                    first.Add(md);
                }
                //第一次循环完毕,对first进行其它操作            for (int i = 1; i < count; i++)//还有count - 1次循环
                {
                    List<MyData> nloop = new List<MyData>();//nloop第n次循环的结果
                    foreach (var g in totalData)
                    {
                        var query = from oneItem in g
                                    orderby oneItem.date descending
                                    select oneItem;
                        MyData md = query.Take((i+1)).Skip(i).Single();
                        count = query.Count() > count ? query.Count() : count;
                        nloop.Add(md);
                    }
            //nloop第n次循环结束,对nloop进行其它操作
                }
            }
        public class MyData
        {
            public int id;
            public int ownerid;
            public string info;
            public DateTime date;
        }
      

  7.   

    linq虽好、高效,2.0没有这个东东,无法实现你上述的 slect查询得到totalData。
    仍然感谢!继续顶...
      

  8.   

    不是啊,.Net2.0支持Linq To DataSet。。
    这个就是用的Linq To DataSet
    你可以通过Sql查询得到表中的全部数据,放在DataTable dt里面,
    然后代码作相应更改就可以了
    当然楼主不会用Linq那就算了
      

  9.   

    没大看明白你的问题,我自己有过类似的情况,处理方法是先select top 10 name from nametable where id > 0
    读出来后记录下第10个值的id,再次读取时以更新后的id做参数。
      

  10.   

    var totalData = from oneItem in dt
                            group oneItem by oneItem.ownerid into g
                            orderby g.Key
                            select g;
    你这个相当于一条句法吧?是不是要转换成SQL语句?var 这种写法怎么改?