Я не думаю (из моих тестов и экспериментов), что вы можете передавать параметры типа DateTime
напрямую.В конце концов (после всех тонкостей клиентского прокси WCF DataService и его достоинства LINQ-to-WCF) службы данных WCF всегда получают свои параметры из строки запроса URL, поэтому в основном все это просто строки....
(это резко контрастирует с использованием привязок SOAP для WCF - там вы, безусловно, можете использовать строго типизированные параметры - DateTime
и все что угодно. Но службы данных WCF - это REST, этовсе URL - и, следовательно, на основе строк)
Итак, мой вывод: вам нужно изменить код, чтобы использовать параметры string
, а затем преобразовать их в DateTime
внутри вашего метода:
[WebGet]
public IQueryable<Job> LoadJobsByDate(string startDate, string endDate)
{
// some error checking needs to be done here! If 'startDate' or 'endDate'
// are NULL or emtpy string --> fall back to a default
// also - you might want to check into .ParseExact and define a list of valid,
// supported date formats that you want to offer your users
DateTime startDt = DateTime.Parse(startDate);
DateTime endDt = DateTime.Parse(endDate);
var context = this.CurrentDataSource;
var jobs = from j in context.Jobs
where j.CreatedDate >= startDt && j.CreatedDate <= endDt
select j;
return jobs;
}
Как я уже упоминал во фрагменте кода - для того, чтобы получить строки и разобрать их в DateTime
, требуется дополнительная проверка ошибок с вашей стороны - это боль, но я думаю, что необходимо убедиться, что ваш код не 'не вводить первый раз, когда кто-либо вводит дату или формат даты неверный ....