LINQ order-by问题

时间:2013-07-11 20:42:13

标签: .net sql linq c#-4.0 sql-order-by

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

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

让我们说表中的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”等,这不是问题....

我如何实现这一目标?

提前致谢

P.S。我尽力解释这个问题。如果还有其他问题,请给我留言。

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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();