簡體   English   中英

orderby()包含數字和字母

[英]orderby () containing numbers and letters

我想按升序對包含數字和字母的數組進行排序,這些值作為字符串存儲在數據庫中。

這是我的清單

4B
1A
1
1B
2
4C
4

並希望他們在數字升序后跟字母的順序排序。

1
1A
1B
2
4
4B
4C

到目前為止,我嘗試了

 allScenes.OrderBy(x => Convert.ToInt32(x.SceneNumber)).ToList()

 allScenes.OrderBy(x => Convert.int.parse(x.SceneNumber)).ToList()

但由於數字后面的字母,兩者都不起作用。 知道如何使這項工作有效嗎?

給定您的示例數據,其中第一個數字始終是一個數字:

allScenes.OrderBy(x => x.SceneNumber).ToList()

如果您可能擁有多位數的數字,請按排序順序提供它們以及您希望在何處顯示它們。

這是對多個數字進行排序的一種方法:

var allScenes = new[]{
  new {SceneNumber="4B"},
  new {SceneNumber="1A"},
  new {SceneNumber="1"},
  new {SceneNumber="1B"},
  new {SceneNumber="2"},
  new {SceneNumber="14"},
  new {SceneNumber="4C"},
  new {SceneNumber="14A"},
  new {SceneNumber="200"},
  new {SceneNumber="200A"},
  new {SceneNumber="200B"}
  };
var nums="0123456789".ToCharArray();
var result=allScenes
  .OrderBy(x=>x.SceneNumber.LastIndexOfAny(nums))
  .ThenBy(x=>x.SceneNumber);

結果:

1 
1A 
1B 
2 
4B 
4C 
14 
14A 
200 
200A 
200B 

數據庫可能無法將LastIndexOfAny函數轉換為類似SQL的內容,因此您可能需要在.OrderBy()之前執行.ToList():

var nums="0123456789".ToCharArray();
var result=allScenes
  .ToList()
  .OrderBy(x=>x.SceneNumber.LastIndexOfAny(nums))
  .ThenBy(x=>x.SceneNumber);

很簡單

string[] allScenes = {"4B","1A","1","1B","2","4C"};

var result = allScenes.OrderBy(x => x.First()).ThenBy(x => x.Last());

當值以string形式存儲到數據庫中時,您只需要編寫OrderBy(e=> e)

下面的代碼證明了這項工作:

string[] items = {"4B", "1A", "1", "1B", "2", "4C", "4"};
items.OrderBy(e=> e) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM