Поскольку выбранные товары имеют разные варианты, то у всех товаров они должны быть отдельными экземплярами. Поскольку вы сказали, что все доступные продукты - это все, то я предполагаю, что набор выбранных идентификаторов продуктов должен быть подмножеством идентификаторов продуктов.
Кроме того, поскольку выбранные продукты являются отдельными экземплярами, возможно, что на каждый общий продукт может быть ноль или более выбранных продуктов, поэтому мое решение работает и для этого случая. Это будет одинаково работать, если есть только ноль или один.
Кроме того, поскольку они являются отдельными экземплярами и , свойство options
является IEnumerable
, для меня имеет смысл создать новый набор экземпляров для объединенных продуктов, чтобы не изменять исходный набор общих продуктов.
public IEnumerable<Product> MergeProducts(
IEnumerable<Product> Products,
IEnumerable<Product> ProductsChosen)
{
return
from p in Products
join pc in ProductsChosen on p.Id equals pc.Id into pcs
select new Product()
{
Id = p.Id,
number = p.number,
options = p.options
.Concat(
from pc2 in pcs
from ao in pc2.options
select ao).ToArray(),
};
}
Вы не объяснили, что такое свойство number
, поэтому я просто выполнил простое присвоение этого значения из списка Products
и проигнорировал это значение из списка ProductsChosen
.
Кроме того, вы не сказали, как нужно объединить AdditionalOptions
. Это не Merge
метод для перечислимых. Вам нужно использовать что-то вроде Concat
или Union
для слияния. Я выбрал Concat
, но это легко изменить.
У вас это работает?