Dalam aplikasi saya, saya menggunakan Entity Framework.
Meja Saya
-Article
-period
-startDate
Saya membutuhkan catatan yang cocok => DateTime.Now > startDate and (startDate + period) > DateTime.Now
Saya mencoba kode ini tetapi sekarang berfungsi
Context.Article
.Where(p => p.StartDate < DateTime.Now)
.Where(p => p.StartDate.AddDays(p.Period) > DateTime.Now)
Ketika saya menjalankan kode saya, pengecualian berikut terjadi
LINQ ke Entitas tidak mengenali metode metode 'System.DateTime AddDays (Double)', dan metode ini tidak dapat diterjemahkan ke dalam ekspresi toko.
c#
linq
entity-framework
datetime
Yucel
sumber
sumber
period
?AddDays
adalah fungsi yang salah jika itu adouble
.Jawaban:
Saat menggunakan LINQ ke Entity Framework, predikat Anda di dalam klausa Where akan diterjemahkan ke SQL. Anda mendapatkan kesalahan itu karena tidak ada terjemahan ke SQL
DateTime.Add()
yang masuk akal.Solusi cepatnya adalah membaca hasil dari pernyataan Where pertama ke dalam memori dan kemudian menggunakan LINQ ke Objek untuk menyelesaikan pemfilteran:
Anda juga dapat mencoba metode EntityFunctions.AddDays jika Anda menggunakan .NET 4.0:
Catatan:
EF 6
SekarangSystem.Data.Entity.DbFunctions.AddDays
.sumber
Saya pikir inilah yang coba disarankan oleh jawaban terakhir, tetapi daripada mencoba menambahkan hari ke p.startdat (sesuatu yang tidak dapat diubah menjadi pernyataan sql) mengapa tidak melakukan sesuatu yang dapat disamakan dengan sql:
sumber
EntityFunctions
solusinya. Di sini, operan kedua tidak diambil dari entitas lain dalam kueri dan dapat dihitung sebelum melakukan kueri. Jika kedua operan ditemukan dalam db,EntityFunctions
solusi akan tetap sesuai sementara solusi dari respons ini tidak berfungsi lagi.Bagaimana kalau mengurangi 2 hari dari DateTime.Now:
Sejujurnya, saya tidak yakin apa yang ingin Anda capai, tetapi ini mungkin berhasil
sumber
Jika Anda membutuhkan ekspresi Anda diterjemahkan ke SQL, Anda dapat mencoba menggunakan
System.Data.Entity.Core.Objects.AddDays.
Sebenarnya ditandai usang tetapi berfungsi. Ini harus diganti dengan System.Data.Entity.DbFunctions.AddDays tetapi saya tidak dapat menemukannya ...
sumber