linq orderby()包含数字和字母

2eafrhcq  于 2023-07-31  发布在  其他
关注(0)|答案(4)|浏览(119)

我想对一个包含数字和字母的数组进行升序排序,这些值作为字符串存储在DB中。
这是我手上的名单

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()


但因为数字后面的字母,所以两者都不起作用。你知道我该怎么做吗?

hzbexzde

hzbexzde1#

给定第一个数字始终为个位数的示例数据:

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);


结果如下:
数据库可能无法将LastIndexOfAny函数转换为类似SQL的函数,因此您可能需要在.OrderBy()之前执行.ToList():

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

ymdaylpp

ymdaylpp2#

很简单

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

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

字符串

qltillow

qltillow3#

由于值以string的形式存储到数据库中,因此您只需写入OrderBy(e=> e)
下面的代码证明了这一点:

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

字符串

8cdiaqws

8cdiaqws4#

我也有一个类似的问题,但有点不同,如下面的例子:

"A4B", "1A1", "123", "1B45", "2", "4C", "4-A2";

字符串
字母或特殊字符可能在字符串列表中的任何位置,但只需要按数字排序。预期结果:

2, A4B, 4C, 1A1, 4-A2, 123, 1B45.

相关问题