Umbraco 7 LINQ для фильтрации моделей детей по диапазону дат - PullRequest
0 голосов
/ 30 октября 2018

У меня есть коллекция статей в Umbraco 7, охватывающая несколько лет, и я хотел написать простой запрос LINQ для получения элементов за текущий год:

var press =  Model.Content.Children.Where(w => Convert.ToDateTime(w.GetPropertyValue("publicationDate")) >= new Date(1,1,2018));

Это приводит к ошибке:

Делегат System.Func не принимает 1 аргумент.

Я собираюсь просто объединить данные в список T - разве кто-то может направить меня в правильном направлении с помощью фильтрации по узлам контента Umbraco?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Ваша проблема в том, что вы используете Date вместо DateTime. Date не является стандартным типом .NET - скорее всего, из какой-то другой DLL, на которую вы ссылались в своем проекте.

Это означает, что он не сопоставим с DateTime, который является типом данных, которые вы конвертируете при извлечении данных из Umbraco (а также типом, который мы используем для внутреннего хранения дат в Umbraco).

Как уже упоминалось в другом ответе, вы также должны использовать метод .GetPropertyValue<DateTime>(), чтобы Umbraco просто сделал преобразование за вас. Это немного упростит ваш код.

Кроме того - ваш запрос работает нормально, если вы просто измените его на DateTime вместо Date - я только что сам это проверил.

Попробуйте сначала поместить дату в переменную, чтобы избежать создания новых экземпляров DateTime внутри Where:

var currentYear = new DateTime(2018, 1, 1);
var press =  Model.Content.Children.Where(x => x.GetPropertyValue<DateTime>("publicationDate") > currentYear);

// or your way:
var press =  Model.Content.Children.Where(w => Convert.ToDateTime(w.GetPropertyValue("publicationDate")) >= date);
0 голосов
/ 31 октября 2018

Я думаю, что-то вроде этого выглядит для меня более «правильным», но это не проверено. Стоит отметить, что я получаю свойство DateTime напрямую от Umbraco. А также я подумал, что сравнение этого с DateTime вместо Date может иметь значение.

var press =  Model.Content.Children.Where(w => w.GetPropertyValue<DateTime>("publicationDate") >= new DateTime(2018,1,1));
...