2010-06-17 40 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;