Я пытаюсь выполнить итерацию из списка с помощью Linq, чтобы создать и вернуть модель, содержащую список элементов и общее количество элементов.
Объект, который должен быть возвращен, имеет видследующее:
public class ListeArticlesModel
{
public List<TuileArticleModel> Items { get; set; }
public int Quantity { get; set; }
}
В настоящее время я застрял с этим:
result.Actualites = tousLesArticlesFromDb
.ToList()
.Where(
a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("ficheArticle_typeDeContenu")
.FirstOrDefault()?.Name == @EnumResources.TypeDeContenu_Actualites)
.OrderBy(a => a.CreateDate)
.Take(criteriaModel.NbrItemsParPage)
.Select(
a => new ListeArticlesModel
{
Items = new List<TuileArticleModel>
{
// returns a TuileArticleModel
getItem(a)
},
})
.FirstOrDefault();
Это не то, что я хочу.Если я удаляю .FirstOrDefault (), я получаю IEnumerable
Я знаю, что что-то упустил.Я строю новую ListeArticleModel для каждого элемента "а", а затем я просто беру первый построенный, но я не вижу, как выбраться отсюда ...
(пс: я закончил нескольконедель назад. Я новичок в C #. Я знаю, что это могут быть основы. Я пытаюсь изучить их: D)
Я пробовал это:
var actus = tousLesArticlesFromDb
.ToList()
.Where(
a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("ficheArticle_typeDeContenu")
.FirstOrDefault()?.Name == @EnumResources.TypeDeContenu_Actualites)
.OrderBy(a => a.CreateDate)
.Take(criteriaModel.NbrItemsParPage);
Это дает мне IEnumerable (используя здесь umbraco), который содержит элементы criteriaModel.NbrItemsParPage
IPublishedContent типа "Actualites", которые я хочу ...
Теперь для каждого я хотел бы создать новый TuileArticleModel
для подачи Items
proptery (List<TuileArticleModel>
) моего result.Actualites
...
РЕДАКТИРОВАТЬ:
Я думаю, что я просто решил свою проблему, выставив ее вам, ребята, и прочитав комментарии.Итак, я сделал это:
var actus = tousLesArticlesFromDb
.ToList()
.Where(
a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("ficheArticle_typeDeContenu")
.FirstOrDefault()?.Name == @EnumResources.TypeDeContenu_Actualites)
.Take(criteriaModel.NbrItemsParPage);
result.Actualites.Items = actus.Select(a => {return getItem(a); }).ToList();
или одним утверждением:
result.Actualites = new ListeArticlesModel
{
Items = tousLesArticlesFromDb
.Where
(
a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("ficheArticle_typeDeContenu")
.FirstOrDefault()?.Name == @EnumResources.TypeDeContenu_Actualites
)
.OrderBy(a => a.CreateDate)
.Take(criteriaModel.NbrItemsParPage)
.Select(a => { return getItem(a); }).ToList(),
};