读书人

SQL脚本转Linq忽然蒙圈了

发布时间: 2013-08-04 18:26:15 作者: rapoo

SQL脚本转Linq,突然蒙圈了
各位高手,先看SQL,然后翻译成Linq,如果SQL都不知道怎么写的请飘过~
很简单的表A有“行业、指数、人物”三列,数据如下:
行业 指数 人物
影视 70 刘亚鹏
影视 90 黄渤
影视 80 范冰冰
音乐 90 张学友
音乐 80 周杰伦
音乐 85 陈奕迅
主持 90 孟非
主持 80 张绍刚

想要选出各个行业指数最高的人物。最终结果应该如下:
行业 指数 人物
影视 90 黄渤
音乐 90 张学友
主持 90 孟非

用SQL选取比较简单,但是Linq怎么写呢?
我初学Linq突然蒙圈了,各位大侠指点下哈,小弟先谢过!
SQL Linq GroupBy Max
[解决办法]
不就是个order by
http://kb.cnblogs.com/page/42469/
[解决办法]
data.GroupBy(x => x.行业).Select(x => x.OrderBy(y => y.指数).Last())
[解决办法]

引用:
Quote: 引用:

data.GroupBy(x => x.行业).Select(x => x.OrderBy(y => y.指数).Last())

这个拉姆达表达式我没学过,能否写个linq语句?var result=from ...select...这种啊?

linq表达式和linq操作符(你所谓的lambda写法)两者都是等价的。而且linq表达式只能实现linq功能的一小部分。所以你应该首先学会linq操作符,然后再学习linq表达式的等价写法。

比如这个
也可以写成
from item in data
group item by item.行业 into x
select (from y in x orderby y.指数 select y).Last()
[解决办法]
按照你的sql转,是这样的:
var table2 = data.GroupBy(x => x.行业).Select(x => new { 行业 = x.Key, 指数 = x.Max(y => y.指数) });
var query = table2.Select(x => data.First(y => y.行业 == x.行业 && y.指数 == x.指数));



当然你可以把两行写在一起。
var query = data.GroupBy(x => x.行业).Select(x => new { 行业 = x.Key, 指数 = x.Max(y => y.指数) }).Select(x => data.First(y => y.行业 == x.行业 && y.指数 == x.指数));
[解决办法]
从你的需求来看,一句代码即可搞定:

var query=db.table1.GroupBy(t=>t.行业).Select(g=>g.OrderByDescending(x=>x.指数).First());

[解决办法]
var query=db.yourtable.GroupBy(t=>t.行业).Select(g=>g.OrderByDescending(x=>x.指数).FirstOrDefault());

读书人网 >.NET

热点推荐