LINQ 中的字符串排序
string sorting in LINQ
我在数据库中有以下数据。
01-001-A-02
01-001-A-01
01-001-B-01
01-002-A-01
01-003-A-01
从上面,我想要排序的数据如下:
01-001-A-01
01-001-A-02
01-001-B-01
...
我的查询如下
var l = _context.Locs.OrderBy(o => o.loc).Take(3);
//result of the Query
01-001-A-01
01-002-A-01
01-003-A-01
这是我的table结构
public class Location
{
[Key]
public int id { get; set; }
public string loc { get; set; }
public bool isEmpty { get; set; }
}
我正在使用 Asp.Net Core 2.2, Code-First
方法。这不是计算列。
按'-'拆分后需要从右向左排序
我的 LINQ
查询中缺少什么?
尚不清楚排序的具体内容,但您应该知道可以使用 ThenBy
实现的几层排序,例如:
string[] data = new string[] {"01-001-A-02", "01-001-A-01", "01-001-B-01", "01-002-A-01", "01-003-A-01"};
var sorted = data.OrderBy(x => x).ThenBy(x=> x.Split('-')[3]);
您可以使用 string.Split
方法分别按字符串的每个部分排序(由 -
拆分):
string[] strArr = { "01-001-A-02", "01-001-A-01", "01-001-B-01", "01-002-A-01", "01-003-A-01", };
strArr = strArr
.Select(s => new { Str = s, Splitted = s.Split('-') })
.OrderBy(i => i.Splitted[0])
.ThenBy(i => i.Splitted[1])
.ThenBy(i => i.Splitted[2])
.ThenBy(i => i.Splitted[3])
.Select(i => i.Str).ToArray();
请注意,这要求每个元素有四个部分(由 -
分隔)。否则,它会抛出 t
.
我在数据库中有以下数据。
01-001-A-02
01-001-A-01
01-001-B-01
01-002-A-01
01-003-A-01
从上面,我想要排序的数据如下:
01-001-A-01
01-001-A-02
01-001-B-01
...
我的查询如下
var l = _context.Locs.OrderBy(o => o.loc).Take(3);
//result of the Query
01-001-A-01
01-002-A-01
01-003-A-01
这是我的table结构
public class Location
{
[Key]
public int id { get; set; }
public string loc { get; set; }
public bool isEmpty { get; set; }
}
我正在使用 Asp.Net Core 2.2, Code-First
方法。这不是计算列。
按'-'拆分后需要从右向左排序
我的 LINQ
查询中缺少什么?
尚不清楚排序的具体内容,但您应该知道可以使用 ThenBy
实现的几层排序,例如:
string[] data = new string[] {"01-001-A-02", "01-001-A-01", "01-001-B-01", "01-002-A-01", "01-003-A-01"};
var sorted = data.OrderBy(x => x).ThenBy(x=> x.Split('-')[3]);
您可以使用 string.Split
方法分别按字符串的每个部分排序(由 -
拆分):
string[] strArr = { "01-001-A-02", "01-001-A-01", "01-001-B-01", "01-002-A-01", "01-003-A-01", };
strArr = strArr
.Select(s => new { Str = s, Splitted = s.Split('-') })
.OrderBy(i => i.Splitted[0])
.ThenBy(i => i.Splitted[1])
.ThenBy(i => i.Splitted[2])
.ThenBy(i => i.Splitted[3])
.Select(i => i.Str).ToArray();
请注意,这要求每个元素有四个部分(由 -
分隔)。否则,它会抛出 t
.