C# 如何选择重复的项目

C# 如何选择重复的项目,c#,linq,select,C#,Linq,Select,我有一个问题 IEnumerable<SelectedProductRequest> selectedProducts = { new SelectedProductRequest {id = 4, Name = "product1", Price = 23}, new SelectedProductRequest {id = 4, Name = "product1", Price = 44}, new SelectedProductRequest {id = 5, Name = "

我有一个问题

IEnumerable<SelectedProductRequest> selectedProducts = {
new SelectedProductRequest {id = 4, Name = "product1", Price = 23},
new SelectedProductRequest {id = 4, Name = "product1", Price = 44},
new SelectedProductRequest {id = 5, Name = "product2", Price = 11}
}

List<MyProducts> myProducts= {
new MyProducts{id = 4, Name = "product1", isExcl= true},
new MyProducts{id = 5, Name = "product2", isExcl= false}
}

IEnumerable<SelectedProductViewModel> products = myProducts
      .Select(product => new SelectedProductViewModel(
                            product.Name,
                            selectedProducts.FirstOrDefault(selectedProduct => selectedProduct.id== product.id)?.Price ?? 0,
                            product.IsExclusive))
                        .OrderByDescending(product => product.id)))
我得到的是:

products= {
new SelectedProductRequest {id = 4, Name = "product1", Price = 23, IsExclusive = true},
new SelectedProductRequest {id = 5, Name = "product2", Price = 11, IsExclusive = false}
}

这是因为有了第一个默认值,你知道我怎样才能得到想要的结果吗?

你可以尝试另外迭代初始质量而不是第一个默认值:

IEnumerable<SelectedProductViewModel> products = myProducts
                .Select(product => selectedProducts.Where(selectedProduct => selectedProduct.id == product.id).Select(
                    resultProduct => new SelectedProductViewModel(
                        product.Name,
                        resultProduct?.Price ?? 0,
                        product.isExcl)))
IEnumerable products=myProducts
.Select(product=>selectedProducts.Where(selectedProduct=>selectedProduct.id==product.id)。选择(
resultProduct=>new SelectedProductViewModel(
产品名称,
结果产品?价格??0,
产品名称(isExcl)))

根据显示的linq,您得到的结果与预期一致。对包含2项的集合调用select,因此将重新运行2项

在id上使用Linq连接以获得所需的输出

IEnumerable<SelectedProductViewModel> products = myProducts
    .Join(selectedProducts, product => product.id, selected => selected.id, (product, selected) =>
        new SelectedProductViewModel(product.Name, selected?.Price ?? 0, product.IsExclusive)
    );
IEnumerable products=myProducts
.Join(selectedProducts,product=>product.id,selected=>selected.id,(product,selected)=>
新的SelectedProductViewModel(product.Name,selected?.Price?0,product.IsExclusive)
);

如果没有将Id传递给视图模型,则需要在加入之前完成订单。

根据显示的linq,您得到的结果与预期一致。您在包含2项的集合上调用select,因此将重新运行2项您可以解释一下,您的代码有什么问题吗?您尝试加入这两个集合了吗?是的,产品集合是正确的,但是如何使用linq方法将选定的产品合并到产品中?谢谢NKosi,这就是我要找的。谢谢,但这将返回一个
IEnumerable
IEnumerable<SelectedProductViewModel> products = myProducts
    .Join(selectedProducts, product => product.id, selected => selected.id, (product, selected) =>
        new SelectedProductViewModel(product.Name, selected?.Price ?? 0, product.IsExclusive)
    );