0

我对 LINQ 有一个奇怪的问题。

我有一个需要按 4 列排序的表……总共 8 列。此表中的行是按时间顺序排列的(按日期时间排序)。

假设表中的 8 个列是 A、B、C、D、E、F、G、H

我需要按 F、E、D、B 排序的表

F=> 字符串

E=> 字符串

D=> 字符串

B=> 日期时间

我写了以下LINQ-

List<Rows> OrderedListOfRows = listOfRows.OrderBy(i => i.F).ThenBy(i=>i.E).ThenBy(i=>i.D).ThenBy(i=>i.B);

我正在对此序列执行操作,并获得所需的结果。但是,我注意到了一个错误。

如果我的 D 示例输入行是“input1”、“input2”、“input3”.....“input10”、“input11”

orderby 函数将条目排序为:“input1”、“input10”、“input11”、“input2”、“input3”......因为 D 是一个字符串。

但是我希望保留原始订单(如果我没有“input10”、“input11”等,这不是问题......

我如何实现这一目标?

提前致谢

PS我已经尽力解释这个问题。如果还有什么,请给我留言。

编辑:我解决了这个问题。我将新列表与该列上的旧列表一起加入,以便保留我的订单。这未在任何建议的“重复”问题中发布。

4

2 回答 2

0

如果您在 D 中有可预测的条目,则可以按如下方式解析字符串:

List<Rows> OrderedListOfRows = listOfRows
  .OrderBy(i => i.F)
  .ThenBy(i=>i.E)
  .ThenBy(i=>i.D.Substring(0,5))
  .ThenBy(i=>Convert.ToInt16(i.D.Substring(6)))
  .ThenBy(i=>i.B);
于 2013-07-11T22:18:06.337 回答
0

如果你想按字符串中的数字排序,你可以试试这个:

int MyOrderBy(string str)
{
  Regex reg=new Regex("\\d+");
  Match m=reg.Match(str);
  if(m.Success) return int.Parse(m.Value);
  else return int.MinValue;
}

然后订购:

    List<Rows> OrderedListOfRows = listOfRows.OrderBy(i => MyOrderBy(i.F))
                                             .ThenBy(i=>MyOrderBy(i.E))
                                             .ThenBy(i=>MyOrderBy(i.D))
                                             .ThenBy(i=>i.B).ToList();
于 2013-07-12T02:12:12.370 回答