Saya punya permintaan linq:

var NextWeekDate = DateTime.Now.AddDays(7);

var BirthData = db.EmployeeMasterAs
.Where(x => x.Emp_BirthDate >= CurrentDate)
.Select(x => new { x.Emp_BirthDate,
     DaysRemaining = (NextWeekDate - x.Emp_BirthDate).Value.TotalDays 
})
.OrderBy(x => x.Emp_BirthDate)
.ToList();

Perhatikan elemen dalam metode Select(), DaysRemaining = (NextWeekDate - x.Emp_BirthDate).Value.TotalDays, saya ingin mendapatkan perbedaan antara tanggal dalam hari dan menyimpannya ke DaysRemaining, kueri ini tidak berfungsi dan pengecualian yang dilemparkannya:

Argumen DbArithmeticExpression harus memiliki tipe umum numerik.

Saya tidak tahu persis bagaimana mencapai ini, Ada Ide?

0
Bilal Ahmed 10 Maret 2017, 17:58

2 jawaban

Jawaban Terbaik

Yap, Mengerti, Jadi begini caranya:

Melakukan operasi aritmatika dengan Tanggal dan Waktu tidak didukung di EF. EntityFramework tidak dapat mengonversi kode Anda ke SQL. Alih-alih itu, Anda dapat menggunakan metode DbFunctions.DiffDays( startExpression, endExpression):

db.EmployeeMasterAs
.Where(x => x.Emp_BirthDate >= CurrentDate)
.Select(x => new { x.Emp_BirthDate,
 DaysRemaining = DbFunctions.DiffDays(x.Emp_BirthDate,NextWeek)
})
.OrderBy(x => x.Emp_BirthDate)
.ToList();

Selanjutnya : DbFunctions Metode fungsi disebut fungsi kanonik. Dan ini adalah serangkaian fungsi, yang didukung oleh semua penyedia Entity Framework. Fungsi kanonik ini akan diterjemahkan ke fungsionalitas sumber data yang sesuai untuk penyedia. Fungsi kanonik adalah cara yang lebih disukai untuk mengakses fungsionalitas di luar bahasa inti, karena mereka membuat kueri tetap portabel.

0
Bilal Ahmed 10 Maret 2017, 15:39

Saya pikir LinqToSql tidak mendukung DateTime.Subtract. Tetapi Anda dapat menggunakan fungsi yang sudah ada sebelumnya SqlMethods.DateDiffDay ( https://msdn.microsoft.com/en-us/library/bb468730(v=vs.110).aspx)

Edit: SqlMethods hanya ditujukan untuk SQL Server. DbFunctions adalah kelas pembantu untuk dipilih terlepas dari jenis basis datanya.

1
flobjective 10 Maret 2017, 15:53