包含数字和字母的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)
我想按升序排列包含数字和字母的数组 这些值作为字符串存储在数据库中。
这是我的列表
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)