C# 合并IEnumerable的问题<;T>;使用Lambda表达式
我有两个IEnumerables类型为“产品”-totalProducts和ProductsChosen。正如名称所示,totalProducts保存所有可用产品,ProductsChosen保存用户选择的产品 产品类具有属性C# 合并IEnumerable的问题<;T>;使用Lambda表达式,c#,linq,ienumerable,linq-to-objects,C#,Linq,Ienumerable,Linq To Objects,我有两个IEnumerables类型为“产品”-totalProducts和ProductsChosen。正如名称所示,totalProducts保存所有可用产品,ProductsChosen保存用户选择的产品 产品类具有属性Id、number和IEnumerable < P>此代码只有在考虑产品ID时才能正常工作,但如果产品ID相同,则我想将产品代码> >代码< >产品> 。但是我不确定如何做到这一点。 谁能帮我一下吗 感谢,因为所选产品具有不同的选项,即总产品必须是不同的实例。既然您已经说
Id
、number
和IEnumerable
< P>此代码只有在考虑产品ID时才能正常工作,但如果产品ID相同,则我想将<代码>产品代码> <代码> >代码< >产品> <代码>。但是我不确定如何做到这一点。
谁能帮我一下吗
感谢,因为所选产品具有不同的选项,即总产品必须是不同的实例。既然您已经说过,所有产品都是可用的,那么我假设所选产品ID的集合必须是产品ID的子集
此外,由于选择的产品是不同的实例,因此每个总产品可能有零个或多个选择的产品,因此我的解决方案也适用于这种情况。如果只有零或一个,它将同样有效
此外,由于它们是不同的实例,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(),
};
}
公共IEnumerable合并产品(
i数不清的产品,
IEnumerable products(Schosen)
{
返回
产品中的p
将pc加入产品p.Id上的Schosen等于pc.Id加入pc
选择新产品()
{
Id=p.Id,
数字=p.number,
选项=p.options
康卡特先生(
从pc2到pcs
来自pc2.options中的ao
选择ao).ToArray(),
};
}
您没有解释什么是number
属性,所以我只是对Products
列表中的这个值做了一个简单的赋值,并忽略了ProductsChosen
列表中的这个值
另外,您没有说明如何合并附加选项。这不是可枚举项的Merge
方法。您需要使用类似于Concat
或Union
的方法进行合并。我选择了Concat
,但这很容易改变
这对你有用吗?改用Union()
方法-虽然concat是公认的答案,但正如你从投票中看到的,Union更倾向于改进标签列表以吸引更多的观众。我认为这个问题需要澄清。我的解释是,您正在查找两个产品集合的并集
,在产品的交集
上,您希望在该结果中找到附加选项的并集
。对吗?
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(),
};
}