将项目列表分配给另一个列表Linq

时间:2019-04-03 02:16:08

标签: c# list 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分配给相同索引处的列表bookId的{​​{1}}属性。我想避免使用for循环,并且想知道是否可以利用Linq。

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

book

1 个答案:

答案 0 :(得分:2)

更新:

Theodor suggested in the comments一样,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

* 请注意,如果ArgumentOutOfRangeException的元素少于bookIds,则会抛出books