Простой способ сравнения дат в атрибуте 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
}