我对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。我尽力解释这个问题。如果还有其他问题,请给我留言。
编辑:我解决了这个问题。我正在使用该列上的旧列表加入新列表,以便保留我的订单。这不会发布在任何建议的“重复”问题中。
答案 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();