Простой способ сравнить даты в атрибуте DateTime с помощью Entity Framework 4 и запросов Linq - PullRequest
8 голосов
/ 06 сентября 2011

Я пытаюсь запустить следующий фрагмент кода, но сравнение не удается, не передавая сущности, которых я ожидаю.

Сравнивает 06/09/2011 0:00:00 с 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();

Как мне сравнить только даты?

Если использовать свойство .Date в части .StartTime.Value, я получу исключение:

Указанный элемент типа «Дата» не поддерживается в LINQ to Entities. Только инициализаторы, члены сущности и свойства навигации сущности поддерживаются.

Ответы [ 4 ]

16 голосов
/ 06 сентября 2011

Вы можете использовать отдельные элементы:

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 .

11 голосов
/ 05 декабря 2013

Вы также можете использовать EntityFunctions.TruncateTime() в пространстве имен System.Data.Objects

Ex.

db.Orders.Where(i => EntityFunctions.TruncateTime(i.OrderFinishDate) == EntityFunctions.TruncateTime(dtBillDate) && i.Status == "B")

Работает как шарм.

0 голосов
/ 06 сентября 2011

Вы можете конвертировать, используя

DateTime.ToShortDateString()

http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx

Это пренебрегало бы временем.

Затем сравните две строки.

if(string1 == string2)
{
 //Do Something
}
0 голосов
/ 06 сентября 2011

попробуй

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...