问题描述
//我有以下自定义类型publicclasstheTypeNameMsg{publicstringtheTypeName{set;get;}//姓名publicdoubleKuCun{set;get;}//库存数量publictheTypeNameMsg(stringT_theTypeName,doubleT_KuCun){theTypeName=T_theTypeName;KuCun=T_KuCun;}}List<theTypeNameMsg>t1=newList<theTypeNameMsg>(){newtheTypeNameMsg("小明",95),newtheTypeNameMsg("张三",91)};List<theTypeNameMsg>t2=newList<theTypeNameMsg>(){newtheTypeNameMsg("小明",80),newtheTypeNameMsg("张三",82),newtheTypeNameMsg("李四",77)};List<theTypeNameMsg>t3=........//合并t1和t2,相同姓名合并一起,且库存相加,t3最终结果只有3个元素,即:("小明",175)、("张三",173)和("李四",77),请教一个简洁的写法
解决方案
解决方案二:
vart3=t1.Union(t2).GroupBy(g=>g.theTypeName).Select(s=>newtheTypeNameMsg(s.Key.theTypeName,s.Sum(m=>m.KuCun)).ToList();
解决方案三:
引用1楼qqamoon的回复:
vart3=t1.Union(t2).GroupBy(g=>g.theTypeName).Select(s=>newtheTypeNameMsg(s.Key.theTypeName,s.Sum(m=>m.KuCun)).ToList();
运行不了啊
解决方案四:
最笨的办法,用foreach遍历,
解决方案五:
publicstaticvoidMain(string[]args){//测试数据List<Student>s1=newList<Student>(){newStudent(){name="1",score=10},newStudent(){name="2",score=20},newStudent(){name="3",score=30},};List<Student>s2=newList<Student>(){newStudent(){name="1",score=10},newStudent(){name="2",score=20},newStudent(){name="3",score=30},};//合并varq=s1.Concat(s2).GroupBy(x=>x.name).Select(x=>newStudent{name=x.Key,score=x.Sum(y=>y.score)});//打印显示foreach(variteminq){Console.WriteLine(item.name+"----"+item.score);}Console.ReadLine();}//测试类publicclassStudent{publicstringname{get;set;}publicintscore{get;set;}}
解决方案六:
vart3=t1.Union(t2).GroupBy(p=>p.theTypeName).Select(p=>newtheTypeNameMsg(p.Key,p.Sum(item=>item.KuCun))).ToList();
解决方案七:
引用2楼marklr的回复:
Quote: 引用1楼qqamoon的回复:
vart3=t1.Union(t2).GroupBy(g=>g.theTypeName).Select(s=>newtheTypeNameMsg(s.Key.theTypeName,s.Sum(m=>m.KuCun)).ToList();运行不了啊
噢噢噢噢~~~我手打的,在s.Sum(m=>m.KuCun))后面少了个括号
解决方案八:
vart3=t1.Concat(t2).GroupBy(a=>a.theTypeName).Select(g=>newtheTypeNameMsg(g.Key,g.Sum(b=>b.KuCun))).ToList();
解决方案九:
用foreach吧,简单。linq搞复杂了
解决方案十:
usingSystem.Linq;List<theTypeNameMsg>t3=t1.Union(t2).GroupBy(g=>g.theTypeName).Select(s=>newtheTypeNameMsg(s.Key,s.Sum(m=>m.KuCun))).ToList();
解决方案十一:
varquery=fromxint1.Concat(t2)groupxbyx.theTypeNameintogselectnewtheTypeNameMsg(g.Key,g.Sum(a=>a.KuCun));vart3=query.ToList();
解决方案十二:
引用1楼qqamoon的回复:
vart3=t1.Union(t2).GroupBy(g=>g.theTypeName).Select(s=>newtheTypeNameMsg(s.Key.theTypeName,s.Sum(m=>m.KuCun)).ToList();
是这样的。写成sql形式,更清晰一些。特别是比这个查询还复杂时。
解决方案十三:
引用8楼drifter2002的回复:
用foreach吧,简单。linq搞复杂了
groupby其实是一个很标准的最基础的语句,如果觉得复杂,那就肯定没怎么学linq。
解决方案十四:
fromingroupbyselect这种代码即美观又好理解,已经非常不错了,就别再foreach了