Como posso classificar lista genérica com Linq?

Como posso classificar myScriptCellsCount.MyCellsCharactersCount (list int type) no linq

public class MyExcelSheetsCells { public List MyCellsCharactersCount { get; set; } public MyExcelSheetsCells() { MyCellsCharactersCount = new List(); } } 
  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); } 

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

ou

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

Você pode usar OrderBy ou Sort, mas há uma diferença entre os 2 que você deve entender:

Se você classificar, ele classifica sua lista “in loco”, portanto, neste exemplo, a variável “lista” é classificada:

// 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; });
// 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; }); 

Se você fizer um OrderBy, a lista original não será afetada, mas um novo enumerável, classificado, será retornado:

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

Editar

Esta resposta foi recentemente votada, então eu revisei. Na minha resposta original, deixei de fora um detalhe muito importante:

Se você usar o código LINQ acima (segundo exemplo), a sorting ocorrerá toda vez que você percorrer a variável “classificado”. Então, se você tiver em mais de um foreach, você irá repetir o tipo. Para evitar isso, altere o código acima para:

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

Isso forçará o enumerador para executar e armazenará o resultado em classificado.

Se você só vai enumerá-lo uma vez, você pode deixar de fora a chamada ToList / ToArray.

Você deve poder usar o método OrderBy na sua lista.

 IEnumerable sortedList = myScriptCellsCount.MyCellsCharactersCount.OrderBy(anInt => anInt); 
 var sorted = from i in MyCellsCharacterCount orderby i descending select i; 

Dê uma olhada nessa resposta . Você pode replace “Process” por seu object obtendo typeOf your List.

Felicidades