我正在尝试使用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,然后我只采用了第一个构建的项目,但是我不知道如何离开这里...
(ps:我几周前毕业。我是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),其中包含我想要的类型为“ Actualites”的criteriaModel.NbrItemsParPage
IPublishedContent项...
现在,我想为每个人创建一个新的TuileArticleModel
来喂养我的Items
的{{1}}个道具(一个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();
答案 0 :(得分:1)
首先获取结果集:
Assn
然后将其传递到新对象中:
var results = tousLesArticlesFromDb
.Where
(
a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("ficheArticle_typeDeContenu")
.FirstOrDefault()?.Name == @EnumResources.TypeDeContenu_Actualites
)
.OrderBy(a => a.CreateDate)
.Take(criteriaModel.NbrItemsParPage);
或者,如果您想在一个语句中完成所有操作:
result.Actualites = new ListeArticlesModel
{
Items = results.ToList()
};
答案 1 :(得分:0)
Group
代替
.ToList()
要注意的另一件事是
.FirstOrDefault()
这将返回一个IQueriable,尚未完成任何处理,您刚刚为其创建了查询。
调用ToList将执行IQueriable并将结果作为列表返回。