Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Linq迭代以创建对象列表?_C#_List_Linq_Umbraco - Fatal编程技术网

C# 如何使用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

我试图使用Linq从一个列表进行迭代,以便创建并返回一个模型,其中包含一个项目列表和一个项目总数

必须返回的对象如下所示:

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()
};