Простой способ сравнения дат в атрибуте DateTime с помощью запросов Entity Framework 4 и Linq
Я пытаюсь запустить следующий бит кода,но сравнение не удается, не передавая мои сущности, которые я ожидаю.
это сравнение 06/09/2011 0:00:00
to 06/09/2011 12:25:00
, последнее значение записи моих баз данных. Так вот почему сравнение проваливается, и я не получаю нужные мне записи.
Я просто пытаюсь сравнить, совпадают ли даты, меня не волнует время.
DateTime today = DateTime.Now.Date;
var newAuctionsResults = repo.FindAllAuctions()
.Where(a => a.IsActive == true || a.StartTime.Value == today)
.ToList();
как я могу сравнить только даты?
Если использовать .Дата в собственность .Время старта.Значение части, я получаю исключение:
указанный член типа "дата" не поддерживается в LINQ to Entities. Только инициализаторы, члены сущностей и свойства навигации сущностей поддерживаются.
4 ответов
вы можете использовать отдельные члены:
var newAuctionsResults = repo.FindAllAuctions()
.Where(a => a.IsActive == true
|| (a.StartTime.Value.Year == todayYear
&& a.StartTime.Value.Month == todayMonth
&& a.StartTime.Value.Day == todayDay))
.ToList();
...или использовать любой из другие методы/свойства, поддерживаемые в L2E.
вы также можете использовать EntityFunctions.TruncateTime()
в пространстве имен System.Data.Objects
Ex.
db.Orders.Where(i => EntityFunctions.TruncateTime(i.OrderFinishDate) == EntityFunctions.TruncateTime(dtBillDate) && i.Status == "B")
работает как шарм.
попробовать
DateTime todayStart = DateTime.Now.Date;
DateTime todayEnd = DateTime.Now;
var newAuctionsResults = repo.FindAllAuctions()
.Where(a => a.IsActive == true || (a.StartTime.Value >= todayStart && a.StartTime.Value <= todayEnd))
.ToList();
вы можете конвертировать с помощью
DateTime.ToShortDateString()
http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx
это будет пренебрегать временем.
затем сравните две строки.
if(string1 == string2)
{
//Do Something
}