Я разработал web api
, который принимает два параметра даты и времени (начало и конец), а затем должен выдавать отдельные записи.
public HttpResponseMessage GetMeterPing(DateTime start, DateTime end)
{
try
{
var startDateTime = start;
var endDateTime = end;
var result = medEntitites.tj_xhqd.Where(m => m.sjsj >= startDateTime && m.sjsj <= endDateTime)
.OrderByDescending(o => o.sjsj)
.Select(s => new { s.zdjh, s.sjsj, s.xhqd })
.Distinct()
.FirstOrDefault();
return Request.CreateResponse(HttpStatusCode.OK, new { data = result });
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
}
}
URL-адрес API:http://localhost:14909/api/meters/GetMeterPing/2018-04-28T00:00:00/2018-04-27T23:59:59
Когда я запускаю этот web-api
, он дает мне
{"data":null}
Также при отладке result
также является null
Любая помощь будет высоко оценен
... Я не смотрел на порядок дат. Это определенно будет основной причиной того, почему запрос Linq не возвращает результатов.
@john Я отвечу на этот вопрос еще раз. Может показаться, что это связано с довольно простой опечаткой, но у него есть достаточно ясное объяснение, и я не думаю, что это плохой вопрос. По крайней мере, это может служить примером того, как вы должны быть осторожны при создании таких сервисов. Поскольку указанные даты были бессмысленны для службы, код выиграет от выдачи BadRequest
, если даты перевернуты. (Для некоторых API даты, отправленные точно так же, будут выражать "Not In")
@Alan Нет, и я не отрицал его, но его стоит закрыть, потому что это типографская ошибка, а не проблема с кодом (я также поддержал ваш ответ, потому что простая проверка предотвратила бы эту проблему).
@john ... нет ничего важнее. Просто это всего лишь опечатка в том футляре, который он задумал. Переворачивание дат - это способ поддержки функции «Дата вне диапазона» в API, поэтому необходима дополнительная проверка, чтобы добавить выразительности его усиленному значению, а не просто опечатку.
@ Алан, я понимаю твою точку зрения. Я отзову свой закрытый голос.
Да, я сделал опечатку. Но спасибо за поддержку
Ваше описание вашей проблемы звучит так, будто выполняемый вами запрос Linq не возвращает никаких результатов, поэтому ваш вызов FirstOrDefault
является дефолтным, то есть возвращает null. Затем вы не выполняете никаких дополнительных проверок и отвечаете результатом этой строки, установленным как значение анонимной проекции, имеющей свойство data
.
Возникает очевидный вопрос, но в какой вселенной
2018-04-28T00:00:00
раньше2018-04-27T23:59:59
? Или, точнее, как свидание может удовлетворять обоим этим условиям:>= 2018-04-28
и<= 2018-04-27T23:59:59
?