C# 返回每个项目的最大结果
在此列表中,教师可以有多个学年。我想修改这个查询,所以我只获取每个老师的最大值C# 返回每个项目的最大结果,c#,linq-to-sql,C#,Linq To Sql,在此列表中,教师可以有多个学年。我想修改这个查询,所以我只获取每个老师的最大值 教师-2012 教师-2013 教师-2014 教师B-2013 教师C-2012 代码: var gridInfo = (from teacher in TeacherAccesses join u in USERS on teacher.ID equals u.ID select new
- 教师-2012
- 教师-2013
- 教师-2014
- 教师B-2013
- 教师C-2012
var gridInfo = (from teacher in TeacherAccesses
join u in USERS
on teacher.ID equals u.ID
select new
{
Name = u.LastName + ", " + u.FirstName,
ID = teacher.ID,
Flag = "Existing",
SchoolID = teacher.SchoolID,
status = teacher.TeacherAttr.IncludeinOfficialResults.Value,
SchoolEndYear = teacher.TeacherAttr.SchoolEndYear
}).OrderByDescending(x=>x.SchoolEndYear).OrderBy(x=>x.Name);
如您所见,我尝试了执行.OrderByDescending
,但当我尝试执行.FirstOrDefault
时,它只返回组中的第一条记录
我希望带回的是:
- 教师-2014
- 教师B-2013
- 教师C-2012
var gridInfo = (from teacher in TeacherAccesses
join u in USERS
on teacher.ID equals u.ID
where teacher.Year = TeacherAccesses.Where(x => x.ID = teacher.ID)
.Max(x => x.TeacherAttr.SchoolEndYear)
select new
{
Name = u.LastName + ", " + u.FirstName,
ID = teacher.ID,
Flag = "Existing",
SchoolID = teacher.SchoolID,
status = teacher.TeacherAttr.IncludeinOfficialResults.Value,
SchoolEndYear = teacher.TeacherAttr.SchoolEndYear
});
下面是一个简化的LINQPad示例:
void Main()
{
var TeacherAccesses = new List<Teacher>() {
new Teacher() { ID = 1, Name = "Teacher-A", TeacherAttr = new Attr() { SchoolEndYear = 2012 } },
new Teacher() { ID = 1, Name = "Teacher-A", TeacherAttr = new Attr() { SchoolEndYear = 2013 } },
new Teacher() { ID = 1, Name = "Teacher-A", TeacherAttr = new Attr() { SchoolEndYear = 2014 } },
new Teacher() { ID = 2, Name = "Teacher-B", TeacherAttr = new Attr() { SchoolEndYear = 2012 } },
new Teacher() { ID = 2, Name = "Teacher-B", TeacherAttr = new Attr() { SchoolEndYear = 2013 } },
new Teacher() { ID = 3, Name = "Teacher-C", TeacherAttr = new Attr() { SchoolEndYear = 2012 } }
};
//TeacherAccesses.Dump();
var latest =
from teacher in TeacherAccesses
where teacher.TeacherAttr.SchoolEndYear == TeacherAccesses.Where(x => x.ID == teacher.ID).Max(x => x.TeacherAttr.SchoolEndYear)
select new {
Name = teacher.Name,
Year = teacher.TeacherAttr.SchoolEndYear
};
latest.Dump();
}
// Define other methods and classes here
public class Teacher
{
public int ID { get; set; }
public string Name { get; set; }
public Attr TeacherAttr { get; set; }
}
public class Attr
{
public int SchoolEndYear { get; set; }
}
您需要将同一教师的记录分组在一起,然后应用
Max
函数,该函数允许您查找组中的Max元素:
var gridInfo = (from teacher in TeacherAccesses
...
})
.GroupBy(x => x.ID)
.Select(g => g.Max(x => x.SchoolEndYear))
.OrderBy(x => x.Name);
我在显示我最初拥有的列(名称、ID、标志)以及Max SchoolEndYear时遇到问题。。。有什么想法吗?@webdad3,有什么问题吗?每当我运行你的查询时,我只会得到学年结束。我需要姓名、身份证、旗帜、学校ID、状态和学校年终。我尝试了几种不同的方法,但都没有成功