加入我又这样一个集合List<Grade> gradeList = new List<Grade>() {
new Grade{ ID=1, UserID=100, _Grade=10, DT= DateTime.Parse("2010-10-12"),IsNormal=true },
new Grade{ ID=2, UserID=100, _Grade=20, DT= DateTime.Parse("2010-10-09"),IsNormal=true },
new Grade{ ID=3, UserID=200, _Grade=11, DT= DateTime.Parse("2010-10-11"),IsNormal=true },
new Grade{ ID=4, UserID=100, _Grade=18, DT= DateTime.Parse("2010-10-18"),IsNormal=true },
new Grade{ ID=5, UserID=300, _Grade=2, DT= DateTime.Parse("2010-10-10"),IsNormal=true },
new Grade{ ID=6, UserID=300, _Grade=15, DT= DateTime.Parse("2010-10-13"),IsNormal=true },
new Grade{ ID=7, UserID=300, _Grade=16, DT= DateTime.Parse("2010-10-02"),IsNormal=false }
};我想求Grade最大的那行的那个对象
我这样写var q = gradeList.Where(k => k._Grade == gradeList.Max(s => s._Grade));这没什么问题
然后我想用另一种写法 var query1 = from g in gradeList
where g.ID.Equals(from f in gradeList select gradeList.Max(s => s.ID))
select g;我这样写的时候,报错说无法将IEnumerable<int> 转化成int
我跟踪一下发现from f in gradeList select gradeList.Max(s => s.ID)这句返回的竟然不是一个int值而是一个集合而且集合中每个grade值都是相同的,都是最大值,这是为什么呢?
最后我只能用这种写法解决 var query1 = from g in gradeList
where g.ID.Equals((from f in gradeList select gradeList.Max(s => s.ID)).First())是不是有什么其他方法呢?另外,我想问一下这两种写法应该没什么本质区别是吧?那什么时候用哪种呢?我觉得下面这种在笔记哦啊复杂的逻辑时应用,不知道对不对!还请Tim分享一下这方面的心得。
new Grade{ ID=1, UserID=100, _Grade=10, DT= DateTime.Parse("2010-10-12"),IsNormal=true },
new Grade{ ID=2, UserID=100, _Grade=20, DT= DateTime.Parse("2010-10-09"),IsNormal=true },
new Grade{ ID=3, UserID=200, _Grade=11, DT= DateTime.Parse("2010-10-11"),IsNormal=true },
new Grade{ ID=4, UserID=100, _Grade=18, DT= DateTime.Parse("2010-10-18"),IsNormal=true },
new Grade{ ID=5, UserID=300, _Grade=2, DT= DateTime.Parse("2010-10-10"),IsNormal=true },
new Grade{ ID=6, UserID=300, _Grade=15, DT= DateTime.Parse("2010-10-13"),IsNormal=true },
new Grade{ ID=7, UserID=300, _Grade=16, DT= DateTime.Parse("2010-10-02"),IsNormal=false }
};我想求Grade最大的那行的那个对象
我这样写var q = gradeList.Where(k => k._Grade == gradeList.Max(s => s._Grade));这没什么问题
然后我想用另一种写法 var query1 = from g in gradeList
where g.ID.Equals(from f in gradeList select gradeList.Max(s => s.ID))
select g;我这样写的时候,报错说无法将IEnumerable<int> 转化成int
我跟踪一下发现from f in gradeList select gradeList.Max(s => s.ID)这句返回的竟然不是一个int值而是一个集合而且集合中每个grade值都是相同的,都是最大值,这是为什么呢?
最后我只能用这种写法解决 var query1 = from g in gradeList
where g.ID.Equals((from f in gradeList select gradeList.Max(s => s.ID)).First())是不是有什么其他方法呢?另外,我想问一下这两种写法应该没什么本质区别是吧?那什么时候用哪种呢?我觉得下面这种在笔记哦啊复杂的逻辑时应用,不知道对不对!还请Tim分享一下这方面的心得。
解决方案 »
- comboBox控件IndexOf 对象问题。
- datatable 添加数据和读取数据
- TcpClient t=new TcpClient("59.64.180.167",51888)?
- XmlDocument 问题
- 线程同步问题
- 有关重绘
- axWindowsMediaPlayer有ImageSourceHeight属性吗?
- 请问关于 Plugin开发技术支持
- C#winform操作word 打开文档(得到文档路径)后能不能获得文档的页面布局的内容(页边距等内容)
- 在C#中利用ADO.NET编程时如何获取SQLSERVER中表中某一列的数据类型?
- DATASET 和 ACCESS 的自动增长列问题
- 如何实现异步刷新
虽然只有一个值,但返回的是一个数据集加个first()就是一个具体的值了
gradeList.Max应该返回的就是一个int值才对啊,求最大值为什么要返回一个集合呢?顶者有分都没人顶,快来顶!!
where g.ID.Equals(from f in gradeList select gradeList.Max(s => s.ID))
select g;很正常,没报错。
var query1 = (from g in gradeList orderby g._Grade select g).First();
var query1 = (from g in gradeList orderby g._Grade select g).First();
所以我觉得和这个有关系,但是不知道为什么max返回的是一组值,却不是一个,可以方法命名说返回值
是一个int的,大家可以看一下。
var query2 = (from g in gradeList orderby g._Grade descending select g).First();//你的修改的
var query1 = from g in gradeList
where g.ID.Equals ((from f in gradeList select gradeList.Max(s => s.ID)).First())
select g;
from f in gradeList select gradeList.Max(s => s.ID) // 你有7条,就会有7条一样的ID=7的记录
(from f in gradeList select f.ID).max() //先取出全部的ID,再 取最大的。 var query1 = from g in gradeList
where g.ID.Equals((from f in gradeList select f.ID).Max())
select g;
恩,思路比我的简单,其实我就是比较奇怪from f in gradeList select gradeList.Max(s => s.ID)
这句为什么不返回一个值,一定要加一个first,呵呵,可能是有点轴了。
var query1 = from g in gradeList
let maxId=gradeList.Max(g1=>g1.ID)
where g.ID.Equals(maxId)
select g;
foreach(var q in query1)
{
Console.WriteLine(q);
}
//把结果打印一下,你应该知道原因了吧...
var query1 = from f in gradeList select gradeList.Max(s => s.ID);
foreach(var q in query1)
{
Console.WriteLine(q);
}
/*
结果:
7
7
7
7
7
7
7*/