【问题标题】:How to select duplicated items如何选择重复的项目
【发布时间】:2020-03-05 21:30:02
【问题描述】:

我有问题

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 = 4, Name = "product1", Price = 44, IsExclusive = true},
new SelectedProductRequest {id = 5, Name = "product2", Price = 11, IsExclusive = false}
}

我得到了什么:

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

那是因为 FirstOrDefault,你知道我怎样才能达到想要的结果吗?

【问题讨论】:

  • 根据显示的 linq,您得到的结果符合预期。您在包含 2 个项目的集合上调用 select,因此将重新计算 2 个项目
  • 你能解释一下,你的代码有什么问题吗?您是否尝试过同时加入这两个集合?
  • 是的,产品集合是正确的,但是如何使用 linq 方法将 selectedProducts 合并到产品中?

标签: c# linq select


【解决方案1】:

根据显示的 linq,您得到的结果符合预期。您在包含 2 个项目的集合上调用 select,因此将重新运行 2 个项目

在 id 上使用 Linq Join 以获得所需的输出。

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

鉴于未将 Id 传递给视图模型,因此需要在加入之前完成订单。

【讨论】:

  • 谢谢 NKosi,这就是我想要的。
【解决方案2】:

您可以尝试另外迭代初始海量而不是 FirstOrDefault:

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&lt;IEnumerable&lt;SelectedProductViewModel&gt;&gt;
猜你喜欢
  • 2011-07-03
  • 2018-11-07
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 2022-11-10
  • 2011-01-13
相关资源
最近更新 更多