Присвойте список элементов определенным атрибутам из другого списка Linq - PullRequest
0 голосов
/ 03 апреля 2019

Допустим, у меня есть два списка, список 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 свойству bookId списка book с тем же индексом. Я хочу избежать использования цикла for, и мне было интересно, смогу ли я использовать Linq.

Я мог бы сделать что-то подобное, но я не уверен, как назначить весь список bookIds одному свойству другого списка:

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

1 Ответ

2 голосов
/ 03 апреля 2019

Обновление:

Как и Теодор, предложенный в комментариях , IndexOf может существенно повлиять на производительность, особенно если у вас большой список.Чтобы не использовать IndexOf, вы можете создать переменную int и увеличить ее внутри ForEach:

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

Исходный ответ:

Если вы хотите назначить первый идентификаторв списке bookIds для первой книги в списке books и во втором идентификаторе для второй книги и т. д. вы можете сделать что-то вроде этого: *

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...