我正在嘗試對來自我的資料庫的串列進行排序。如果我OrderFunds列中的所有欄位都是null,我想按另一列排序。誰能告訴我如何做到這一點?
這是我的代碼:
List<Fund> funds = await fundSupervisor.List().Where(fund => fund.IsActive)
.OrderBy(fund => fund.OrderFunds)
或者,我的OrderBy子句可以允許null值。那也會幫助我。
uj5u.com熱心網友回復:
這是解決方案
List<Fund> funds = fundSupervisor
.Where(w => w.IsActive)
.OrderBy(w => w.OrderFunds)
.ThenBy(w => w.OtherField).ToList();
ThenBy() 允許您指定其他欄位來對串列進行排序。
uj5u.com熱心網友回復:
如果您需要完全不同的排序,當且僅當所有列都為空時,您需要提前檢查。
List<Fund> funds = await fundSupervisor.List().Where(fund => fund.IsActive)
if(funds .Any(item => item.OrderFunds != null))
funds = funds.OrderBy(fund => fund.OrderFunds);
else
funds = funds.OrderBy(fund => fund.SomethingElse);
否則,如果您想按另一個值 if OrderFundsis排序null,那么您可以簡單地在OrderBy.
var orderedFunds = funds.OrderBy(fund => fund.OrderFunds ?? SomeOtherValue);
如果要按另一個值排序作為二級排序,請使用ThenBy. ThenBy如果 - 操作中有多個相同的值,OrderBy則按 -value對所有值進行排序。
var orderedThenByFunds = funds.OrderBy(fund => fund.OrderFunds).ThenBy(fund => fund.SomeOtherValue);
考慮到這些行是不同的:假設您有 3 個專案(假設OrderFunds是int?:
Fund1 { OrderFunds = 1, SomeOtherValue = 8 }
Fund2 { OrderFunds = 3, SomeOtherValue = 6 }
Fund3 { OrderFunds = null, SomeOtherValue = 4 }
Fund4 { OrderFunds = null, SomeOtherValue = 2 }
然后orderedFunds將回傳 Fund1(1), Fund4(2[SomeOtherValue]), Fund2(3), Fund3(4[SomeOtherValue]) 并orderedThenByFunds回傳 Fund1(1,8), Fund2(3,8), Fund4(null,2 ), Fund3(null,2)。大括號中的值是按順序排列的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341583.html
上一篇:回傳的引數格式不正確
下一篇:unity剛體移動時上升并反彈
