我在linqtosql的查詢返回LabelNumber:C#LINQ的自定義排序
var q = from list in db.Lists
select list.LabelNumber;
var q
就變成像這樣元素的IEnumerable<string>
:
{"1","2","2.A","2.B","3","3.A","3.B"}
我基本上要訂購的元素他們出現在上面,但我不能使用OrderBy(x=>x.LabelNumber)
,因爲"10"
將被放置在"1"
之後和"2"
之前。
我假設我必須編寫一個自定義比較函數,但是如何使用linq來做到這一點?
編輯:我認爲以下所有答案都可以使用,但必須在所有回覆中添加一條警告。
如果您正在使用Linq2SQL,則不能在查詢中使用數組索引。爲了克服這個問題,你應該有兩個查詢。一個從SQL讀取。第二個廣告排序:
var q = from list in db.Lists
select list.LabelNumber;
var q2 = q.AsEnumerable()
.OrderBy(x => int.Parse(x.LabelNumber.Split('.')[0]))
.ThenBy(x => x.Number
.Contains(".") ?
x.LabelNumber.Split('.')[1].ToString()
:
string.Empty);
僅供參考,按您想要的方式對數字進行排序稱爲「自然排序」。 – mquander 2010-10-03 04:44:41