Either<Error, List<(Stuff, OtherStuff)>> eitherCombined =
from stuff in eitherStuff
from otherStuff in eitherOtherStuff
select (from s1item in stuff
join s2item in otherStuff
on s1item.Key1 equals s2item.Key2
select (s1item, s2item)).ToList();
Внешнее выражение LINQ объединяет оба элемента Either
.Внутренние выражения LINQ объединяют списки (если оба типа «правильные»).
Я изменил ваш тип возвращаемого значения на кортеж, чтобы избежать объекта.Ваш оригинальный пример будет выглядеть так:
Either<Error, List<object>> eitherCombined =
from stuff in eitherStuff
from otherStuff in eitherOtherStuff
select (from s1item in stuff
join s2item in otherStuff
on s1item.Key1 equals s2item.Key2
select new {s1item, s2item} as object).ToList();
Вы можете использовать свой анонимный тип (без небезопасного object
), например:
var eitherCombined =
from stuff in eitherStuff
from otherStuff in eitherOtherStuff
select (from s1item in stuff
join s2item in otherStuff
on s1item.Key1 equals s2item.Key2
select new {s1item, s2item}).ToList();
Еще один совет: вы можете использовать один из неизменяемых LanguageExtтипы вместо List
...