2016-04-21 3 views
0

Я пытаюсь вернуть подмножество записей из массива на основе даты.Итерация по массиву с помощью Array.FindAll()

Мой код выглядит следующим образом:

var SomeAccounts = Array.FindAll(Accounts, x => x.modification_date > modification_date); 

if (SomeAccounts == null) 
{ 
    return NotFound(); 
} 

return Ok(JsonConvert.SerializeObject(SomeAccounts)); 

Учетные записи массив имеет modification_date поле, но то, что приходит обратно все счета. В моем тестовом образце, 2 имеют ультрасовременные даты> 15 мая 2016 г. Этот вид кода работает в других областях, но не на дату, которая просто:

public DateTime modification_date { get; set; } 

Что я делаю не так?

+0

Начните с итерации, чтобы увидеть, как-то он разбивается на Serialize. Разбейте его, чтобы узнать, откуда они берутся. – Paparazzi

+3

Убедитесь, что значения 'DateTime' находятся в одном и том же часовом поясе и имеют один и тот же' .Kind'. Сравнение даты не так просто, как выглядит на поверхности. –

+0

Возвращенный массив никогда не является нулевым, это пустой массив. [Документация] (https://msdn.microsoft.com/en-us/library/1kkxfxdd (v = vs.110) .aspx): _ «Массив, содержащий все элементы, которые соответствуют условиям, определенным указанным предикатом, если найдено, в противном случае - пустой массив ». _ –

ответ

1

Обеспечение того, чтобы массива фактически пустой

Во-первых, метод Array.FindAll() никогда не должен фактически вернуть null как он возвращает пустой массив, если совпадений не найдено, так что вы, вероятно, хотите, чтобы проверить, если какие-либо значения были найдены:

if (SomeAccounts.Length == 0) 
{ 
    return NotFound(); 
} 

Если результаты возвращаются массив (без значений), то это было бы правильно (как бы не ударить NotFound() ранее, как он никогда не был нулевым).

экспертизы Даты

Как Cory упоминалось в комментарии, сравнивающие объекты DateTime может быть крайне сложно. Вы захотите убедиться, что любая информация, такая как TimeZones, учитывается при сравнении значений.

Вы можете также рассмотреть возможность использования отладчика вручную, чтобы посмотреть, как выглядят ваши объекты DateTime (как свойство modification_date, так и ваша действительная переменная modification_date). Попробуйте сравнить их в окне «Часы», чтобы убедиться, что сравнения работают правильно.

+0

True. Но на самом деле не отвечает на вопрос. –

+0

Две даты модификации: version_date ":" 2015-05-13T15: 15: 19 "Я сравниваю их с 5-12-2015, которые входят как 5-12-2015 12: 00:00 AM В отладчике я не могу продвинуться дальше в FindAll(). То есть я не вижу, почему сравнение всегда бывает успешным. – Ron

+0

Одним из способов устранения отдельных сравнений было бы создание словаря, который сопоставлял каждую учетную запись с ее сравнительным значением как показано [в этом GitHub Gist] (https://gist.github.com/Rionmonster/2556850471d9c6a953d49cffd52ddbcd). Если оба элемента сравнения являются объектами DateTime, тогда форматирование не должно быть проблемой, но это должно позволить вам для проверки каждого отдельно. –

Смежные вопросы