从另一个列表中的对象更新列表中的所有对象

时间:2015-07-08 12:36:03

标签: c# linq

我有以下两个对象:

public class BlogPost
    {
        public int BlogPostId { get; set; }
        public Author Author { get; set; }
    }

public class Author
    {
        public int AuthorId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

我有两个单独的50个Blog Post对象列表和50个Author对象。如何组合这两者,以便将Author对象分配给Blog Post的Author属性?

我尝试过使用Zip方法,但我认为这不是我想要的。这个question类似,但我希望value成为另一个列表中的对象。

上下文:使用EntityFramework中的Seed方法填充我的数据库。

编辑: 我应该提到,因为它是种子数据,我真的不关心哪个作者与哪个BlogPost相匹配。因此,我试图使用Zip方法。

2 个答案:

答案 0 :(得分:1)

如果BlogPostAuthor对象通过索引链接,您可以使用for - 循环:

for(int i = 0; i < blogPosts.Count; i++)
    blogPosts[i].Author = authors[i];

您可以使用像Zip这样的LINQ方法,但是您必须从旧方法创建新对象并填充新列表。如果要修改原始集合,for - 循环更合适(也更有效)。您也可以只修改单个属性而无需复制所有属性。

所以这也有效,但不是最好的方法(考虑BlogPost有100个属性):

blogPosts = blogPosts.Zip(authors, (bp, a) => new BlogPost
{
    BlogPostId = bp.BlogPostId,
    Author = a
}).ToList();

但是这个要求提出了一个问题,即为什么你没有正确地初始化BlogPost列表。为什么你需要两个独立的收藏?

答案 1 :(得分:1)

您的博客实体需要维护FK AuthorId。当你这样做时,你可以:

List<List<string>>