求助:数据库数据在界面显示N条合并一条
--------------------编程问答-------------------- 用Linq的GroupBy方法可以了。 --------------------编程问答-------------------- 或者在数据库里面group by 也行 --------------------编程问答--------------------没办法在数据库里面group by,因为我要的报告类型、检验时期和工件号列表那3行,不能进行group by了 --------------------编程问答-------------------- 来个大神帮帮忙嘛,小女子在此谢过 --------------------编程问答-------------------- 写了一个很简单的demo,你看看啦
//测试groupby
List<Person> list = GetList();
var arr3 = list.GroupBy(x => x.Id).Select(p => new { id = p.Key, nums = p.Count() });
foreach (var item in arr3)
{
Console.WriteLine(item.id + "counts:" + item.nums);
}
准备数据:
--------------------编程问答-------------------- 全部读出来再循环,应该不会慢。
public static List<Person> GetList()
{
List<Person> list = new List<Person>
{
new Person{Id="1",Name="百二",Data=7},
new Person{Id="2",Name="擦",Data=8},
new Person{Id="3",Name="发",Data=11},
new Person{Id="2",Name="大",Data=10},
new Person{Id="3",Name="俄",Data=12},
new Person{Id="1",Name="阿一",Data=1}
};
return list;
}
我估计你是开始是不是每次循环都去数据库里读呀。 --------------------编程问答-------------------- google 搜索“SQL 行转列”
你的列是固定的?直接用几个case就行了 --------------------编程问答--------------------
不固定,我的报告类型是动态的 --------------------编程问答-------------------- 不固定的就是复杂点,别人已经总结的很好了。完全理解可能要些时间,你可以依葫芦画瓢照着改改,实现功能就行了 --------------------编程问答-------------------- 只有自己再琢磨琢磨了 --------------------编程问答--------------------
static void Main(string[] args)
{
//化学0x100000 //机械0x010000
List<ArrayList> mylist = new List<ArrayList>()
{
new ArrayList(){001,"热卷箱",4,"化学成份报告"},
new ArrayList() { 001, "热卷箱", 4, "焊接报告" },
new ArrayList() { 001, "热卷箱", 4, "机械报告" },
new ArrayList() { 002, "热卷箱", 1, "机械报告" }
};
List<ArrayList> myResult = new List<ArrayList>();
var ss = mylist.GroupBy(r => r[0]);
foreach (var a in ss)
{
ArrayList oneResult = new ArrayList();
oneResult.Add(a.Key);
bool firstIN = true;
//合并数目
int recordCount = a.Count(r =>
{
if (firstIN)
{
//相同字条
oneResult.Add(r[1]);
oneResult.Add(r[2]);
firstIN = false;
}
oneResult.Add(r[3]);
return true;
});
oneResult.Add(recordCount);
myResult.Add(oneResult);
}
//输出
myResult.ForEach(r =>
{
foreach (var one in r)
{
Console.Write("{0} ||", one);
}
Console.WriteLine();
});
Console.ReadKey();
}
自我感觉写的好丑,但我向来不怕丑,提出自己看法只求提高自己水平,第一用的是ArrayList而不是泛型实体类,太多的装箱拆箱很损性能,第二报告类型可以用[Flags] enum 然后按条件与是否会漂亮一些。第三太多的foreach,不知道怎么精减 --------------------编程问答--------------------
谢谢哈,我明天试下 --------------------编程问答--------------------
亲,你这个代码可以直接拷贝下来执行么? --------------------编程问答--------------------
亲,试了你这个方法应该可以实现了,可惜我们系统用的.NET framework2.0用不起这个方法
我好纠结啊.....
补充:.NET技术 , C#