Поставщик данных, используемый для перевода кода LINQ в SQL, не понимает ToShortDateString
.Из-за этого вы не можете использовать его в запросе LINQ, который отправляется в базу данных.Вы должны вызвать этот метод после того, как данные были возвращены из базы данных:
var BeOrders = (from o in BEdb.onlineOrders
join s in BEdb.order_Statuses
on o.status equals s.ID
where o.custCode == pp.AccountID
select new {
city = o.city,
customersOrderRef = o.customersOrderRef,
date = (o.actualDelivery ?? o.plannedDelivery),
date1 = (o.actualCease ?? o.actualCease),
number = o.number,
ordered = o.ordered,
postCode = o.postCode,
status = s.status,
stockCode = o.stockCode,
UpdatedByAccount = o.UpdatedByAccount
}).ToList()
.Select(x => new DataLayer.OrderStatusItem {
city = x.city,
customersOrderRef = x.customersOrderRef,
date = x.date,
date1 = x.date1,
number = x.number,
ordered = x.ordered.DateTime.ToShortDateString(),
postCode = x.postCode,
status = x.status,
stockCode = x.stockCode,
UpdatedByAccount = x.UpdatedByAccount
};
Кстати: есть другое решение, которое производит более короткий код:
var BeOrders = (from o in BEdb.onlineOrders
join s in BEdb.order_Statuses
on o.status equals s.ID
where o.custCode == pp.AccountID
select new { o, s }).ToList()
.Select(x => new DataLayer.OrderStatusItem
{
city = x.o.city,
customersOrderRef = x.o.customersOrderRef,
date = (x.o.actualDelivery ?? x.o.plannedDelivery),
date1 = (x.o.actualCease ?? x.o.actualCease),
number = x.o.number,
ordered = x.o.ordered.DateTime.ToShortDateString(),
postCode = x.o.postCode,
status = x.s.status,
stockCode = x.o.stockCode,
UpdatedByAccount = x.o.UpdatedByAccount
};
Разница между этими двумяверсиями является то, что первая версия запрашивает только те столбцы из базы данных, которая вам нужна, тогда как вторая версия будет возвращать все столбцы двух таблиц.