SQL'de, aynı mantığın Linq'den Entity'ye nasıl kullanıldığına dair bir örnek var mı?LINQ'den Entity'ye iki tarih arasında nasıl arama yapılır?
SELECT * FROM TABLE WHERE DATE BETWEEN STARTDATE AND ENDDATE
SQL'de, aynı mantığın Linq'den Entity'ye nasıl kullanıldığına dair bir örnek var mı?LINQ'den Entity'ye iki tarih arasında nasıl arama yapılır?
SELECT * FROM TABLE WHERE DATE BETWEEN STARTDATE AND ENDDATE
C# varsayalım.
bitiş tarihindeDateTime startDate=bla;
DateTime endDate=blabla;
using(var db=new MyDataContext())
{
var filteredData=db.TABLE.Where(t => t.DATE > startDate && t.DATE < endDate);
//...
}
Bunu başlangıç tarihinde kapsayıcı olmak isteyecektir, ama münhasır . Bunun nedeni, tarih olarak kullanılan DateTime
'un o günün gerçekten başlangıcı olması ve günün sonuna kadar uzanmamasıdır. Belirli DateTime
değerleri kullanarak bile >=
ve <
yerine >=
ve <=
veya >
ve <
kullanmak
// dates that are inclusive on the date range
var startDate = new DateTime(2016, 1, 1);
var endDate = new DateTime(2016, 12, 31);
...
// WRONG: this will ignore data on the last day
.Where(obj => obj.StartDate >= startDate && obj.EndDate <= endDate)
// RIGHT: this will include the last day
var endDateExclusive = endDate.AddDays(1);
...
.Where(obj => obj.StartDate >= startDate && obj.EndDate < endDateExclusive)
, hala önemli olabilir.
Hem "hem de eşit" işaretleri kullandıysanız, iki tarih aralığı X'den Y'ye ve Y'den Z'ye kadar her ikisi de tam olarak Y ile eşleşen kayıtları içerir. Gereksinimlerinize bağlı olarak bu kayda eklenmesi ciddi bir kusur olabilir. her iki tarih aralığında. Benzer şekilde, >
ve <
kullanırsanız, her iki tarih aralığındaki Y ile tam olarak eşleşen kayıtları hariç tutarsınız.
'' = 've' <= 'tuşlarını kullanarak 'BETWEEN' ile aynı sonuçları verin. –
Kesinlikle bu nedenle BETWEEN kullanmayın. Diğer formun açıklığını tercih ederim. – spender
Benim için bu işe yaramadı Entity hatası LINQ var. Ayrıca DBContext –