C# 如何使用Linq迭代以创建对象列表?
我试图使用Linq从一个列表进行迭代,以便创建并返回一个模型,其中包含一个项目列表和一个项目总数 必须返回的对象如下所示:C# 如何使用Linq迭代以创建对象列表?,c#,list,linq,umbraco,C#,List,Linq,Umbraco,我试图使用Linq从一个列表进行迭代,以便创建并返回一个模型,其中包含一个项目列表和一个项目总数 必须返回的对象如下所示: public class ListeArticlesModel { public List<TuileArticleModel> Items { get; set; } public int Quantity { get; set; } } 或者在一份声明中: result.Actuali
public class ListeArticlesModel
{
public List<TuileArticleModel> Items { get; set; }
public int Quantity { get; set; }
}
或者在一份声明中:
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(),
};
result.implements=新建ListArticlesModel
{
Items=tousLesArticlesFromDb
哪里
(
a=>a.GetPropertyValue(“ficharticle_typedeconcatnu”)
.FirstOrDefault()?.Name=@EnumResources.typedeconcatnu\u实现
)
.OrderBy(a=>a.CreateDate)
.Take(criteriaModel.NbrItemsParPage)
.Select(a=>{return getItem(a);}).ToList(),
};
而不是
.FirstOrDefault()
另一件需要注意的事情是
tousLesArticlesFromDb
.Where( *** )
.OrderBy(a => a.CreateDate)
.Take(criteriaModel.NbrItemsParPage)
.Select(
a => new ListeArticlesModel
{
Items = new List<TuileArticleModel>
{
// returns a TuileArticleModel
getItem(a)
},
})
TousleArticlesFromDB
.其中(***)
.OrderBy(a=>a.CreateDate)
.Take(criteriaModel.NbrItemsParPage)
.选择(
a=>新建ListArticlesModel
{
项目=新列表
{
//返回TuileArticleModel
项目(a)
},
})
这将返回一个IQueriable,尚未完成任何处理,您刚刚为其创建了查询
调用ToList将执行iQuery并将结果作为列表返回。首先获取结果集:
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 = tousLesArticlesFromDb
.Where
(
a => a.GetPropertyValue<IEnumerable<IPublishedContent>>("ficheArticle_typeDeContenu")
.FirstOrDefault()?.Name == @EnumResources.TypeDeContenu_Actualites
)
.OrderBy(a => a.CreateDate)
.Take(criteriaModel.NbrItemsParPage);
.ToList()
};
result.implements=新建ListArticlesModel
{
Items=tousLesArticlesFromDb
哪里
(
a=>a.GetPropertyValue(“ficharticle_typedeconcatnu”)
.FirstOrDefault()?.Name=@EnumResources.typedeconcatnu\u实现
)
.OrderBy(a=>a.CreateDate)
.Take(criteriaModel.NbrItemsParPage);
托利斯先生()
};
我认为a正确地显示了您拥有的源数据类型(或足够模仿的源数据类型),以及您通过该方法获得的数据v您想要获得的可能会有所帮助您是否尝试将.ToList()放在函数末尾?@a.Hasemeyer我打了个平手,但它返回了一个IEnumerable。但无论如何,我一路都做错了…:)您只需从ToList数据库中删除TousLesArticles之后的.ToList(),将所有数据放入内存,然后对其进行查询,这就破坏了查询的意义。删除.ToList()和.FirstOrDefault将为您提供所需select语句的iqueryable otthanks,我想我找到了一个与您提供的解决方案类似的解决方案。它是否遗漏了完整声明中的内容?我不明白两次拍摄之间会发生什么事;还有ToListe()…?我推荐你的一种解决方案来达到我的目的。我已经编辑了我的帖子,所以你可以看到你帮助的结果:)非常感谢!事实上,这根本不可能回来。请参阅tousLesArticlesFromDb后面的.ToList(),它从db获取所有数据,并在之后对内存进行查询that@npo哎哟,我看到了,如果我的回答正确的话,我想把它删掉。
.FirstOrDefault()
tousLesArticlesFromDb
.Where( *** )
.OrderBy(a => a.CreateDate)
.Take(criteriaModel.NbrItemsParPage)
.Select(
a => new ListeArticlesModel
{
Items = new List<TuileArticleModel>
{
// returns a TuileArticleModel
getItem(a)
},
})
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()
};
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);
.ToList()
};