Sep 2, 2010
The specified type member Date is not supported in LINQ to Entities
On a RIA-enabled Silverlight project I wrote the following LINQ to Entities query in my Domain Service:
public IQueryable<Order> GetOrders()
{
var qry = from order in ObjectContext.orders
where order.OrderDate.Date == DateTime.Now.Date
select order;
return qry;
}
I want to ignore the time part of the DateTime so I only compare the date parts but when I ran the query I got this error:
Load operation failed for query 'GetOrders'. The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
Solution Part 1 (Works in a viewmodel)
I’ve had this error before and remember I had to check if my date was between a start and end date. Like this:
var qry = from order in ObjectContext.orders
where order.OrderDate >= DateTime.Now.Date
&& order.OrderDate < DateTime.Now.Date.AddDays(1)
select order;
return qry;
But while this works if you build this query on the client (like in a viewmodel), it fails when it’s constructed in a DomainService with the following error:
Load operation failed for query 'GetOrders'. LINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)' method, and this method cannot be translated into a store expression.
Solution Part 2 (Works in DomainService)
Well, the answer is easy enough but not too elegant. We need a helper variable where you add a day to the datetime:
var date2 = DateTime.Now.Date.AddDays(1);
var qry = from order in ObjectContext.orders
where order.OrderDate >= DateTime.Now.Date
&& order.OrderDate < date2
select order;
return qry;

