Ich brauchte aus der Datenbank eine Liste der fünf Studenten, die als nächstes Geburtstag haben. Daten wie Name oder Geburtsdatum stehen dabei in einer eigenen Tabelle Person, der Join machts natürlich auch nicht einfacher. Die Lösung sieht so aus:
// upcoming birthdays
var geburtstage = (
from student in DbContext.Student
join person in DbContext.Person on student.PersonId equals person.PersonId
orderby
(new DateTime(DateTime.Today.Year, person.Geburtsdatum.Month, person.Geburtsdatum.Day) > DateTime.Now ? 1 : 0) descending,
(new DateTime(DateTime.Today.Year, person.Geburtsdatum.Month, person.Geburtsdatum.Day) > DateTime.Now) ? new DateTime(DateTime.Today.Year, person.Geburtsdatum.Month, person.Geburtsdatum.Day) : new DateTime(DateTime.Today.Year + 1, person.Geburtsdatum.Month, person.Geburtsdatum.Day) ascending
select new {
Geburtsdatum = (new DateTime(DateTime.Today.Year, person.Geburtsdatum.Month, person.Geburtsdatum.Day) > DateTime.Now) ? new DateTime(DateTime.Today.Year, person.Geburtsdatum.Month, person.Geburtsdatum.Day) : new DateTime(DateTime.Today.Year + 1, person.Geburtsdatum.Month, person.Geburtsdatum.Day),
student.StudentId,
person.PersonId,
person.Firstname,
person.Lastname
}
).Take(5);