Bei Verwendung dieses Codes in Entity Framework wird der folgende Fehler angezeigt. Ich muss alle Zeilen für ein bestimmtes Datum DateTimeStart
abrufen , ist vom Typ DataType in diesem Format2013-01-30 12:00:00.000
Code:
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => x.DateTimeStart.Date == currentDateTime.Date);
Error:
base {System.SystemException} = {"Das angegebene Typmitglied 'Date' wird in LINQ to Entities nicht unterstützt. Es werden nur Initialisierer, Entity-Mitglieder und Entity-Navigationseigenschaften unterstützt."}
Irgendwelche Ideen, wie man das Problem behebt?
Antworten:
DateTime.Date
kann nicht in SQL konvertiert werden. Verwenden Sie die EntityFunctions.TruncateTime- Methode, um den Datumsteil abzurufen .UPDATE: Wie in den Kommentaren erwähnt, ist @shankbond in Entity Framework 6
EntityFunctions
veraltet, und Sie sollten dieDbFunctions
Klasse verwenden, die mit Entity Framework geliefert wird .quelle
Sie sollten jetzt verwenden
DbFunctions.TruncateTime
quelle
Ich möchte eine Lösung hinzufügen, die mir geholfen hat, dieses Problem im Entity Framework zu lösen:
Ich hoffe es hilft.
quelle
EntityFunctions
ist obsolet. Erwägen SieDbFunctions
stattdessen die Verwendung .quelle
Verwenden Sie EntityFunctions.TruncateTime () immer sowohl für x.DateTimeStart als auch für currentDate. sowie :
quelle
Verwenden Sie einfach einfache Eigenschaften.
Wenn zukünftige Daten in Ihrer App nicht möglich sind, ist > = x.DateTimeStart> = currentDateTime.Date ausreichend.
Wenn Sie komplexere Datumsvergleiche haben, überprüfen Sie die Canonical-Funktionen und wenn Sie EF6 + DB-Funktionen haben
Allgemeiner - Für Personen, die nach Problemen suchen Unterstützte Linq-Methoden in EF können ähnliche Probleme mit linq-Anweisungen erklären, die auf Speicherbasislisten funktionieren, jedoch nicht in EF.
quelle
Vereinfacht:
quelle
Verwenden Sie den folgenden Code für die Verwendung von EF6:
quelle
Eine andere Lösung könnte sein:
quelle