我想你想要像下面這樣,雖然我不知道這是多高效:
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; }
}
結果:
Teacher-A 2014
Teacher-B 2013
Teacher-C 2012
我有一個問題,顯示我最初有(名稱,ID,國旗)以及Max SchoolEndYear ...你的想法? – webdad3
@ webdad3,有什麼問題? – Andrei
每當我運行你的查詢,我只是得到SchoolEndYear。我需要姓名,身份證,國旗,學校編號,身份和SchoolEndYear。我嘗試了幾個變化,但沒有得到任何工作 – webdad3