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

C# 从另一个列表中的对象更新列表中的所有对象,c#,linq,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 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个博客文章对象和50个作者对象。如何将两者结合起来,以便将Author对象指定给博客文章的Author属性

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

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

编辑:
我应该提到这一点,因为这是种子数据,我并不在乎哪个作者与哪个博客文章相匹配。因此,我尝试使用Zip方法。

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

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

但是这个要求提出了一个问题,为什么您没有在第一时间正确初始化BlogPost列表。为什么您需要两个单独的集合?

您的blogpost实体需要维护一个FK AuthorId。当您这样做时,您可以:

public List<BlogPost> Compose(List<BlogPost> blogPosts, List<Author> authors) {
    var composedBlogPosts = new List<BlogPost> (blogPosts);
    foreach(var blogPost in blogPosts) {
        composedBlogPost.Author = authors.Single(a=>a.AuthorId == blogPost.AuthorId);
    }
    return composedBlogPost;
}
公共列表撰写(列出博客帖子,列出作者){
var composedBlogPosts=新列表(blogPosts);
foreach(blogPost中的var blogPost){
composedBlogPost.Author=authors.Single(a=>a.AuthorId==blogPost.AuthorId);
}
返回composedBlogPost;
}

项目如何关联,仅通过索引?然后使用Zip。当我这样做时,我倾向于(使用您的示例)在BlogPost中使用AuthorId,并使用public Author Author{get{return Author.GetAuthorById(this.AuthorId);}}}但对象仅通过索引相关。对不起,应该提到它。通过索引的方式,你必须有他们在正确的顺序,加上一个作者只能有一篇文章。通过索引建立关系是否可行?@Kaf,是的,这是正确的。对不起,BlogPost与Author的类比不是很好。但是在这种情况下,BlogPost只能有一个作者,我不关心哪个作者被分配到哪个BlogPost。抱歉给你带来困惑。嘿,对不起,在你让编辑工作完美运行之前,你的最后一个答案!如果你把它改回来,我就接受你的回答。@BlakeMumford:我又加了一次。我删除了它,因为我不想推广它。如果您想修改原始集合,for循环会更好。谢谢,您更新的答案也非常有效!非常感谢你的帮助,非常感谢。祝你有愉快的一天。
public List<BlogPost> Compose(List<BlogPost> blogPosts, List<Author> authors) {
    var composedBlogPosts = new List<BlogPost> (blogPosts);
    foreach(var blogPost in blogPosts) {
        composedBlogPost.Author = authors.Single(a=>a.AuthorId == blogPost.AuthorId);
    }
    return composedBlogPost;
}