LINQ: die 5 Personen abfragen, die als nächstes Geburtstag haben

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);

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.