日期:2014-05-20  浏览次数:20752 次

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.指数));