将项列表分配给另一个列表 Linq 中的特定属性



假设我有两个列表,一个bookIds列表和一个book列表。

bookIds列表如下所示:

var bookIds = new List<string>();

books列表如下所示:

var books = new List<Book>();
public class Book
{
     public string bookId;
     public string bookName;
}

我想使用Linq并将bookIds列表中的每个 id 分配给同一索引book列表的 bookId 属性。我想避免使用 for 循环,并且想知道我是否可以利用 Linq。

我可以做这样的事情,但我不确定如何将整个 bookIds 列表分配给另一个列表的一个属性:

books.foreach(x => x.bookId = bookIds); // ==> this is wrong but you might get my idea

更新:

正如Theodor在评论中建议的那样,IndexOf可能会对性能产生相当大的影响,特别是如果你有一个很大的列表。为了避免使用IndexOf,你可以创建一个int变量,并在ForEach内递增它:

int i = 0;
books.ForEach(x => x.bookId = bookIds[i++]);

原答案:

如果要将bookIds列表中的第一个 id 分配给books列表中的第一本书,将第二个 id 分配给第二本书,依此类推,您可以执行以下操作:*

books.ForEach(x => x.bookId = bookIds[books.IndexOf(x)]);

完整示例:

var bookIds = new List<string>() { "1", "2" };
var books = new List<Book>()
    { new Book() { bookName = "Book1" },
      new Book() { bookName = "Book2"}
    };
books.ForEach(x => x.bookId = bookIds[books.IndexOf(x)]);
Console.WriteLine(books[0].bookName + " has id: " + books[0].bookId);
Console.WriteLine(books[1].bookName + " has id: " + books[1].bookId);

输出:

Book1 has id: 1
Book2 has id: 2

*请注意,如果bookIds元素少于books,这将引发ArgumentOutOfRangeException

最新更新