表结构如下:
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<> 数据列表。请指导...
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<> 数据列表。请指导...
是不是先用List存储第一次循环的,第二次循环时添加到List的时候要去掉第一次出现过的?
List<数据类型> list = new List<数据类型>();
if(!list.Exists(new Predicate<数据类型>(delegate(数据类型 obj){return obj.条件字段==比较字段;})))
{
//添加没有出现过的
}
然后第二轮查询的时候 条件中加 not in (3,5,6,9,10...)
希望能给出个有代码的解决方案。
//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;
}
仍然感谢!继续顶...
这个就是用的Linq To DataSet
你可以通过Sql查询得到表中的全部数据,放在DataTable dt里面,
然后代码作相应更改就可以了
当然楼主不会用Linq那就算了
读出来后记录下第10个值的id,再次读取时以更新后的id做参数。
group oneItem by oneItem.ownerid into g
orderby g.Key
select g;
你这个相当于一条句法吧?是不是要转换成SQL语句?var 这种写法怎么改?