2017-08-11 56 views
-2

我有一个领域string orderNoint lineNo排序用字符串列表,像int

对象List<Batch> batchesList new List<Batch>();列表我打印“orderNo-lineNo的”

我想orderNo然后对它进行排序lineNo的。我的问题是,使用LINQ的sort(),这将排序为字符串,从而11AG131-13实际上之前11AG131-2

batchesList.Sort((x, y) => (x.orderNo + x.lineNo).CompareTo(y.orderNo + y.lineNo)); 

感谢您的帮助来

+1

。 – maccettura

+0

我在汽车写手机...尝试OrderBy(int.tryparse(你的字符串))通过(int.TryParse(秒字符串)) – Juan

+0

就这样我清楚..你想'11AG131-2'即使'11AG131-13'的'lineNo'小于'11AG131-2'的'lineNo',也要在11AG131-13之前? –

回答

6
var sortedBatches = batchesList.OrderBy(b => b.orderNo) 
           .ThenBy(b => b.lineNo) 
           .ToList(); 
+0

这也是一个很好的方法 –

+0

@ J.D。这与你的相同。 ;) – cdhowie

+0

如果我正在清楚地阅读OP问题,他们希望'11AG131-2'来到'11AG131-13'之前?如果是这样,你的解决方案产生的OP已经经历的结果 –

0

有一个惯用的方法来排序多个值:如果你希望它们被分类为INT的你必须在排序前将它们转换为`int`

batchesList.Sort((x, y) => { 
    var i = x.orderNo.CompareTo(y.orderNo); 

    if (i != 0) { return i; } 

    return x.lineNo.CompareTo(y.lineNo); 
}); 
1
var newList = (from x in batchesList orderby x.orderNo, x.lineNo select x).ToList(); 
+1

这是缺少'选择'。 – juharr

+0

哈哈,对吧。我现在要修复它。 –