我有这段代码:
return inventoryItems
.Where(i => 0 < String.Compare(i.ID, ID))
.Take(CountToFetch);
...但我想订购结果,如下:
return inventoryItems
.Where(i => 0 < String.Compare(i.ID, ID))
.Take(CountToFetch)
.OrderBy(i.pksize);
...但是,最终i
是红色/超出范围。为什么?尝试在OrderBy()
之前定位Take()
没有任何区别。
答案 0 :(得分:6)
return inventoryItems.Where(i => 0 < String.Compare(i.ID, ID))
.Take(CountToFetch)
.OrderBy(i => i.pksize);
也许您应该更改OrderBy
和Take
命令以使结果可预测:
return inventoryItems.Where(i => 0 < String.Compare(i.ID, ID))
.OrderBy(i => i.pksize)
.Take(CountToFetch);
答案 1 :(得分:3)
i
中没有OrderBy
。
您需要OrderBy(i => i.pksize)
(或确实x => x.pksize
,whatever => whatever.pksize
等。)
允许from x in something where x.IsOkay orderby x.Priority
等的语法一直使用相同的变量标签,但它变成了多个lambda表达式,每个表达式彼此分开。 (something.Where(x => x.IsOkay).OrderBy(x => x.Priority)
,但他们需要每个都是完整的表达。
答案 2 :(得分:1)
您似乎已尝试使用i
中声明的Where
。如果仔细查看括号,您应该会发现它实际上不再位于OrderBy
范围内。所以第一个问题是您尝试使用超出范围的变量。
OrderBy
实际上需要能够检查IEnumerable
中每个元素的属性,因此仅传递 1的值元素的属性。它需要知道如何来获取每个元素的属性,这就是你通常传入lambda表达式,匿名委托或方法的原因。
正如其他人指出的那样,您可以像使用Where
中那样使用lambda表达式来解决问题:
.OrderBy(i => i.pksize)