我有一份订购产品清单。我还有一个索引值列表。我想提取其索引在索引列表中的所有产品。现在我正在这样做:
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>
。
prodDictionary
是Dictionary<int?, List<Product>>
。
答案 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();
?