【问题标题】:string sorting in LINQ [closed]LINQ中的字符串排序[关闭]
【发布时间】:2020-01-29 09:11:13
【问题描述】:

我在数据库中有以下数据。

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

这是我的表结构

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 查询中遗漏了什么?

【问题讨论】:

  • 您能否更新您的问题以更清楚地了解数据结构(列和类型)以及Locsloc 是什么?

标签: c# linq asp.net-core-2.2


【解决方案1】:

您可以使用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

【讨论】:

  • 我们能否扩展这个查询以支持没有 4 个部分的元素,在这种情况下按 i.Splitted[0] 排序就足够了。
  • @Ramesh 你需要为此编写更复杂的代码。你不能这么简单。
【解决方案2】:

目前尚不清楚排序到底应该是什么,但您应该知道可以使用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]);

【讨论】:

  • 用'-'分割后需要从右到左排序
  • @Ramesh 您可以应用我在 sn-p 中显示的模式来链接许多 ThenBy 语句,以便按您想要的任何顺序进行排序。
猜你喜欢
  • 2013-07-31
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多