Where子句仅返回与索引数组匹配的产品子集

时间:2018-04-12 17:47:35

标签: c# indexing where ienumerable

我有一份订购产品清单。我还有一个索引值列表。我想提取其索引在索引列表中的所有产品。现在我正在这样做:

var indexes = new List<int> { 1, 2, 5, 7, 10 };
var myProducts = orderedProducts.Where((pr, i) => indexes.Any(x => x == i)).ToList();

但是,myProducts中只有2个元素:索引为1和2的产品。它完全错过了5,7和10.发生了什么?我该如何解决这个问题?

注意:orderedProducts.Count始终大于indexes列表的最大值。

orderedProducts由以下内容组成:

orderedProducts = productDictionary[fam.Key]
.ToList()
.OrderBy(g => g.factor)
.ToList();

其中g.factor是int,fam.Key是产品字典的int键。我检查了myProducts,确实按因子升序排序List<Product>

prodDictionaryDictionary<int?, List<Product>>

2 个答案:

答案 0 :(得分:0)

你在测试中遗漏了一些东西。你说“$(".navGen").on('click',function(){ $("#navpill li.active").hide(); $("#navpill li:not(.active)").show(); }); 总是大于索引列表的最大值”。考虑到你说“myProducts只有2个元素”,这没有任何意义。 myProducts.Count必须是&lt; 6.因此问题。您只需比较List中的索引即可提取元素。您可以通过向列表中添加更多产品来“解决”问题。

orderedProducts.Count

取消注释产品,您可以按预期获得5个结果。基于0的数组上的索引为10。

答案 1 :(得分:0)

为什么不只是indexes.Where(i => i < orderedProducts.Count).Select(i => orderedProducts[i]).ToList();