这个LINQ:
public IEnumerable<InventoryItem> GetDepartmentRange(double deptBegin, double deptEnd)
{
// Break the doubles into their component parts:
int deptStartWhole = (int)Math.Truncate(deptBegin);
int startFraction = (int)((deptBegin - deptStartWhole) * 100);
int deptEndWhole = (int)Math.Truncate(deptEnd);
int endFraction = (int)((deptBegin - deptEndWhole) * 100);
return inventoryItems.Where(d => d.dept >= deptStartWhole).Where(e => e.subdept >= startFraction)
.Where(f => f.dept <= deptEndWhole)
.Where(g => g.subdept >= endFraction)
.OrderBy(o => o.dept)
.OrderBy(s => s.subdept);
}
...在我输入时返回预期的数据:
http://localhost:28642/api/inventoryitems/GetDeptRange/1.1/79.99/
...即(子集):
<InventoryItem>
<Description>LID - Blank & Ten PLU</Description>
<ID>110</ID>
<OpenQty>0</OpenQty>
<UPC>110</UPC>
<UnitCost>4</UnitCost>
<UnitList>5</UnitList>
<crv_id>0</crv_id>
<dept>2</dept>
<pksize>1</pksize>
<subdept>10</subdept>
<upc_pack_size>1</upc_pack_size>
<vendor_id>LOCATIONID</vendor_id>
<vendor_item/>
</InventoryItem>
<InventoryItem>
<Description>BLT 6PK LNNR</Description>
<ID>01820000978</ID>
<OpenQty>0</OpenQty>
<UPC>01820000988</UPC>
<UnitCost>19.45</UnitCost>
<UnitList>11.99</UnitList>
<crv_id>0</crv_id>
<dept>10</dept>
<pksize>6</pksize>
<subdept>10</subdept>
<upc_pack_size>1</upc_pack_size>
<vendor_id>CLAREROSE</vendor_id>
<vendor_item/>
</InventoryItem>
<InventoryItem>
<Description>LID - Eleven & Eleven PLU</Description>
<ID>111</ID>
<OpenQty>0</OpenQty>
<UPC>111</UPC>
<UnitCost>4</UnitCost>
<UnitList>5</UnitList>
<crv_id>0</crv_id>
<dept>2</dept>
<pksize>1</pksize>
<subdept>11</subdept>
<upc_pack_size>1</upc_pack_size>
<vendor_id>LOCATIONID</vendor_id>
<vendor_item/>
</InventoryItem>
...但是数据不是由dept和subdept排序的(它从dept 2,subdept 10到dept 10,subdept 10,到dept 2,subdept 11.为什么不按LINQ orderbys排序?怎么能我按照dept和subdept订购了吗?
答案 0 :(得分:8)
你的上一次OrderBy
吹走了你的第一个。您按dept
订购了列表,然后按subdept
重新排序结果。
您要在此处使用ThenBy
来保留第一个排序。
您的代码如下所示:
return inventoryItems.Where(d => d.dept >= deptStartWhole).Where(e => e.subdept >= startFraction)
.Where(f => f.dept <= deptEndWhole)
.Where(g => g.subdept >= endFraction)
.OrderBy(o => o.dept)
.ThenBy(s => s.subdept);
答案 1 :(得分:2)
您应该使用ThenBy:
.Orderby(o => o.debt).ThenBy(s => s.subdept)
答案 2 :(得分:1)
他们背靠背执行。因此它首先按部门排序然后由子部门单独排序,因此列表仅由子部门排序。您想使用此帖子中显示的ThenBy...
系列方法: