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.