2010-06-17 2 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

1

Вы должны быть в состоянии использовать метод OrderBy в списке.

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

Вы можете использовать OrderBy или сортировки, но есть разница между 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; 
}); 
 

Если вы делаете OrderBy, первоначальный список не изменяется, но новый, отсортированные перечислимы возвращается:

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

Редактировать

Этот ответ был недавно одобрен, поэтому я рассмотрел его. В моем первоначальном ответе я оставил очень важную информацию:

Если вы используете код LINQ выше (второй пример), сортировка будет происходить каждый раз, когда вы перебираете переменную «sorted». Итак, если у вас есть более чем в 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; 
0

Посмотрите на this answer. Вы можете заменить «Процесс» на свой объект, получив typeOf для вашего списка.

Cheers

Смежные вопросы