Reputation: 36763
I'm trying to run the following bit of code, but the comparison fails by not handing my the entities I expect it to.
It's comparing 06/09/2011 0:00:00
to 06/09/2011 12:25:00
, the latter being my databases record value. So that's why the comparison is failing and I'm not getting the records I need.
I'm just trying to compare if the dates match up, I'm don't care about the time.
DateTime today = DateTime.Now.Date;
var newAuctionsResults = repo.FindAllAuctions()
.Where(a => a.IsActive == true || a.StartTime.Value == today)
.ToList();
How can I compare only the dates?
If use the .Date property in the .StartTime.Value part, I get an exception:
The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
Upvotes: 8
Views: 17663
Reputation: 1068
You can also use EntityFunctions.TruncateTime()
under the namespace System.Data.Objects
Ex.
db.Orders.Where(i => EntityFunctions.TruncateTime(i.OrderFinishDate) == EntityFunctions.TruncateTime(dtBillDate) && i.Status == "B")
Works like charm.
Upvotes: 11
Reputation: 126587
You can use the individual members:
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();
...or use any of the other methods/properties supported in L2E.
Upvotes: 16
Reputation: 382
You could convert using
DateTime.ToShortDateString()
http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx
This would neglect the Time.
Then compare the two Strings.
if(string1 == string2)
{
//Do Something
}
Upvotes: -2
Reputation: 70379
try
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();
Upvotes: -1