Проще всего было бы использовать объединение, как вы предлагали:
trainingUsers.Join(
delegatesToBeReminded,
user => user.UserGuid,
delegateToBeReminded => delegateToBeReminded.UserGuid,
(user, delegateToBeReminded) => new RecipientDetail
{
FullName = user.FullName,
Email = user.Email,
Delegate = delegateToBeReminded,
});
(или вы можете написать эквивалент в синтаксисе запроса linq, как вы это сделали).
Другой способ - это чтобы переписать это в синтаксисе запроса linq, используя let
:
from user in trainingUsers
let delegateToBeReminded = delegatesToBeReminded.FirstOrDefault(d => d.UserGuid == user.UserGuid)
where delegateToBeReminded != null
select new RecipientDetail
{
FullName = user.FullName,
Email = user.Email,
Delegate = delegateToBeReminded,
}
Примечание , что они различаются в зависимости от того, что происходит, если для конкретного пользователя существует более одного делегата. Первый создает новый RecipientDetail
объект для каждой пары пользователь / делегат; второй создает RecipientDetail
объект для каждого пользователя и выбирает первого делегата.