Linq 如何对列表进行排序?

Linq 如何对列表进行排序?,linq,list,Linq,List,好的,我有一个列表,我想排序。首先,一些代码: foreach (var Row in Result) { foreach (var RowAll in Row.All) { DataObject.Add(new List<string>() { RowAll.Value1, RowAll.Value2, RowAll.Value3}); break; } }

好的,我有一个列表,我想排序。首先,一些代码:

    foreach (var Row in Result)
    {
        foreach (var RowAll in Row.All)
        {
            DataObject.Add(new List<string>() { RowAll.Value1, RowAll.Value2, RowAll.Value3});
            break; 
        }
    }
foreach(结果中的变量行)
{
foreach(行中的var RowAll.All)
{
添加(新列表(){RowAll.Value1,RowAll.Value2,RowAll.Value3});
打破
}
}
现在我想按每个子列表的值对父列表进行排序2。
这可能吗?如果是这样,我该怎么做?

您可以通过LINQ执行此操作:

 // I'm assuming here that "LastCheckin" is defined as List<List<string>> or similar
 // ...

 var sorted = Data.LastCheckin.OrderBy(list => list[1]);
如果您需要在运行时指定升序或降序,一种简单的方法是:

 bool ascending = true; // Set to false for decending

 int mult = ascending ? 1 : -1;
 Data.LastCheckin.Sort( (a,b) => mult * a[1].CompareTo(b[1]) );

为了处理更复杂的检查,您可以将lambda拆分为多行:

 bool ascending = true; // Set to false for decending
 string myDateFormat = GetDateFormat(); // Specify date format

 int mult = ascending ? 1 : -1;
 Data.LastCheckin.Sort( (aStr,bStr) => 
    {
        DateTime a, b;
        bool aSuccess = DateTime.TryParseExact(aStr[1], myDateFormat, DateTimeStyles.None, CultureInfo.InvariantCulture, out a);
        bool bSuccess = DateTime.TryParseExact(bStr[1], myDateFormat, DateTimeStyles.None, CultureInfo.InvariantCulture, out b);

        int result;
        if (!aSuccess)
            result = bSuccess ? -1 : 0;
        else if (!bSuccess)
            result = 1;
        else
            result = a.CompareTo(b);

        return mult * result;

    });

这将处理a和b上的解析器故障,并应将它们放在排序的末尾。

我设法使其正常工作:

listOfLists = listOfLists.OrderByDescending(a => a.Max(x => x.paramToSoryBy)).ToList();

如何将数据保存在data.LastCheckin中,而不将其排序?或者,如何访问已排序的内容并将其放回数据中。LastCheckin?@Soo:我刚刚添加了一个通过List.sort执行此操作的就地排序。它应该满足您的要求。如何指定升序或降序?@Soo:为您添加了升序/降序乘数。@里德,非常感谢!我代码中的这一点已经困扰了我很长一段时间。
listOfLists = listOfLists.OrderByDescending(a => a.Max(x => x.paramToSoryBy)).ToList();