Menggunakan kode ini di Entity Framework saya menerima galat berikut. Saya perlu mendapatkan semua baris untuk tanggal tertentu, DateTimeStart
adalah tipe DataType dalam format ini2013-01-30 12:00:00.000
Kode:
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference)
.Where(x => x.DateTimeStart.Date == currentDateTime.Date);
Kesalahan:
base {System.SystemException} = {"Jenis anggota 'Tanggal' yang ditentukan tidak didukung di LINQ untuk Entitas. Hanya penginisialisasi, anggota entitas, dan properti navigasi entitas yang didukung."}
Ada ide bagaimana cara memperbaikinya?
Jawaban:
DateTime.Date
tidak dapat dikonversi ke SQL. Gunakan metode EntityFunctions.TruncateTime untuk mendapatkan tanggal part.var eventsCustom = eventCustomRepository .FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference) .Where(x => EntityFunctions.TruncateTime(x.DateTimeStart) == currentDate.Date);
PEMBARUAN: Seperti yang disebutkan @shankbond dalam komentar, di Entity Framework 6
EntityFunctions
sudah usang, dan Anda harus menggunakanDbFunctions
kelas, yang dikirimkan dengan Entity Framework.sumber
Anda sekarang harus menggunakan
DbFunctions.TruncateTime
var anyCalls = _db.CallLogs.Where(r => DbFunctions.TruncateTime(r.DateTime) == callDateTime.Date).ToList();
sumber
Saya ingin menambahkan solusi, yang telah membantu saya menyelesaikan masalah ini dalam kerangka entitas:
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference) .Where(x => x.DateTimeStart.Year == currentDateTime.Year && x.DateTimeStart.Month== currentDateTime.Month && x.DateTimeStart.Day == currentDateTime.Day );
Saya harap ini membantu.
sumber
EntityFunctions
sudah usang. Pertimbangkan untuk menggunakanDbFunctions
sebagai gantinya.var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference) .Where(x => DbFunctions.TruncateTime(x.DateTimeStart) == currentDate.Date);
sumber
Selalu gunakan EntityFunctions.TruncateTime () untuk x.DateTimeStart dan currentDate. seperti :
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference).Where(x => EntityFunctions.TruncateTime(x.DateTimeStart) == EntityFunctions.TruncateTime(currentDate));
sumber
Cukup gunakan properti sederhana.
var tomorrow = currentDateTime.Date + 1; var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference) .Where(x => x.DateTimeStart >= currentDateTime.Date and x.DateTimeStart < tomorrow);
Jika tanggal di masa mendatang tidak memungkinkan dalam aplikasi Anda, maka > = x.DateTimeStart> = currentDateTime.Date sudah cukup.
jika Anda memiliki perbandingan tanggal yang lebih kompleks, periksa fungsi Canonical dan jika Anda memiliki fungsi EF6 + DB
Lebih Umum - Untuk orang yang mencari masalah Metode Lini yang Didukung di EF dapat menjelaskan masalah serupa dengan pernyataan LINQ yang bekerja pada Daftar basis Memori tetapi tidak di EF.
sumber
Sederhana:
DateTime time = System.DateTime.Now; ModelName m = context.TableName.Where(x=> DbFunctions.TruncateTime(x.Date) == time.Date)).FirstOrDefault();
sumber
Gunakan kode di bawah ini untuk menggunakan EF6:
(DbFunctions.TruncateTime(x.User.LeaveDate.Value)
sumber
Solusi lain bisa jadi:
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference).AsEnumerable() .Where(x => x.DateTimeStart.Date == currentDate.Date).AsQueryable();
sumber
Saya memiliki masalah yang sama dengan
Entity Framework 6.1.3
Namun dengan skenario yang berbeda. Properti model saya adalah tipe nullable
DateTime
DateTime? CreatedDate { get; set; }
Jadi saya perlu menanyakan tanggal hari ini untuk memeriksa semua catatan, jadi ini yang berhasil untuk saya. Yang berarti saya perlu memotong kedua catatan untuk mendapatkan kueri yang tepat
DbContext
:Where(w => DbFunctions.TruncateTime(w.CreatedDate) == DbFunctions.TruncateTime(DateTime.Now);
sumber