2010-06-17 51 views
4

我怎么可以排序myScriptCellsCount.MyCellsCharactersCount(单整型)在LINQ我怎么可以排序泛型列表的LINQ?

public class MyExcelSheetsCells 
    { 
     public List<int> MyCellsCharactersCount { get; set; } 

     public MyExcelSheetsCells() 
     { 
      MyCellsCharactersCount = new List<int>(); 
     } 

    }
void ArrangedDataList(DataTable dTable) 
     { 
      DAL.MyExcelSheets myexcelSheet = new DAL.MyExcelSheets(); 
      myScriptCellsCount = new TestExceltoSql.DAL.MyExcelSheetsCells(); 

      foreach (DataColumn col in dTable.Columns) 
       myexcelSheet.MyColumnNames.Add(col.ColumnName.ToString()); 
      foreach(DataColumn dc in dTable.Columns) 
      foreach (DataRow dr in dTable.Rows) 
       myScriptCellsCount.MyCellsCharactersCount.Add(dr[dc].ToString().Length); 
      //How can i sort desc 
      //myScriptCellsCount.MyCellsCharactersCount = from list in myScriptCellsCount.MyCellsCharactersCount 
      //           orderby list.CompareTo(descending 
      //           select list; 
      CreatSqlTable(myexcelSheet.MyColumnNames, dTable.TableName, myScriptCellsCount.MyCellsCharactersCount[0].ToString()); 
      myscript.WriteScript(myscript.SqlScripts); 
     }

回答

8
// using Linq 
MyCellsCharactersCount.OrderBy(x => x);   // ascending 
MyCellsCharactersCount.OrderByDescending(x => x); // descending 

// not using Linq 
MyCellsCharactersCount.Sort();      // ascending 
MyCellsCharactersCount.Sort().Reverse();   // descending 
+0

它应该是OrderByDescending。 – XIII 2010-06-17 14:47:17

1

您应该能够使用OrderBy方法在您的名单。

IEnumerable sortedList = myScriptCellsCount.MyCellsCharactersCount.OrderBy(anInt => anInt); 
8

您可以使用排序依据或排序,但你应该明白2之间的区别:

如果你这样做排序,它“到位”排序列表,所以在这个例子中,变量“列表”被排序:

 

// you can manipulate whether you return 1 or -1 to do ascending/descending sorts 
list.Sort((x, y) => 
{ 
    if (x > y) return 1; 
    else if (x == y) return 0; 
    else return -1; 
}); 
 

如果你做一个排序依据,原始列表不会受到影响,但新的排序枚举返回:

var sorted = list.OrderByDescending(x => x)

编辑

这个答案最近upvoted,所以我回顾了它。在我最初的反应,我离开了一个非常重要的细节:

如果你使用上面(第二个例子)的LINQ代码,排序会在每次迭代“排序”可变时发生。所以,如果你有它在超过1分的foreach,你会重复的排序。为避免这种情况,请将上面的代码更改为:

var sorted = list.OrderByDescending(x => x).ToList(); // or .ToArray() 

这将强制枚举器运行,并将结果存储在排序中。

如果你只打算一次枚举它,你可以离开了ToList/ToArray的调用。

0
var sorted = from i in MyCellsCharacterCount orderby i descending select i;