Присвоение значений из одного списка другому с помощью LINQ

Здравствуйте, у меня есть небольшая проблема с присвоением значений свойств из одних элементов списков другим. Я знаю, что мог бы решить это «по-старому», перебирая оба списка и т. Д., Но я ищу более элегантное решение с использованием LINQ.

Начнем с кода...

class SourceType
{
    public int Id;
    public string Name;
    // other properties
}

class DestinationType
{
    public int Id;
    public string Name;
    // other properties
}

List<SourceType> sourceList = new List<SourceType>();
sourceList.Add(new SourceType { Id = 1, Name = "1111" });
sourceList.Add(new SourceType { Id = 2, Name = "2222" });
sourceList.Add(new SourceType { Id = 3, Name = "3333" });
sourceList.Add(new SourceType { Id = 5, Name = "5555" });

List<DestinationType> destinationList = new List<DestinationType>();
destinationList.Add(new DestinationType { Id = 1, Name = null });
destinationList.Add(new DestinationType { Id = 2, Name = null });
destinationList.Add(new DestinationType { Id = 3, Name = null });
destinationList.Add(new DestinationType { Id = 4, Name = null });

Я хотел бы добиться следующего:

  • Список назначения должен быть заполнен Именами соответствующих записей (по Id) в исходном списке
  • Целевой список не должен содержать записи, которые не присутствует в обоих списках сразу (например, Id: 4,5 должен быть исключен) - что-то вроде внутреннего соединения
  • Я хотел бы избежать создания нового списка назначения с обновленными записями, потому что оба списка уже существуют и очень большие, так что никаких «конвертировать» или «выбрать новый».

В конце список назначения должен содержать:

1 "1111"
2 "2222"
3 "3333"

Есть ли какое-нибудь элегантное (однострочное Lambda? ;) решение для этого с использованием LINQ?

Будем признательны за любую помощь! Спасибо!

6
задан user1269810 14 March 2012 в 18:50
поделиться