Как я могу отсортировать общий список с Linq? - PullRequest
4 голосов
/ 17 июня 2010

Как мне отсортировать myScriptCellsCount.MyCellsCharactersCount (list int type) в 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);
        }

Ответы [ 5 ]

9 голосов
/ 17 июня 2010
// using Linq
MyCellsCharactersCount.OrderBy(x => x);            // ascending
MyCellsCharactersCount.OrderByDescending(x => x);  // descending

или

// not using Linq
MyCellsCharactersCount.Sort();                     // ascending
MyCellsCharactersCount.Sort().Reverse();           // descending
8 голосов
/ 17 июня 2010

Вы можете использовать OrderBy или Sort, но есть разница между двумя, которую вы должны понимать:

Если вы выполняете сортировку, она сортирует ваш список «на месте», поэтому в этом примере переменная «список» сортируется:


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

1009 ** * Редактировать 1010 ** * 1011

За этот ответ недавно проголосовали, поэтому я его просмотрел. В своем первоначальном ответе я упустил действительно важную деталь:

Если вы используете приведенный выше код LINQ (второй пример), сортировка будет происходить каждый раз, когда вы выполняете итерацию по переменной «sorted». Итак, если у вас есть более чем в 1 foreach, вы будете повторять сортировку. Чтобы избежать этого, измените код выше:

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

Это заставит работать перечислитель и сохранит результат в отсортированном виде.

Если вы собираетесь перечислить его только один раз, вы можете пропустить вызов ToList / ToArray.

1 голос
/ 17 июня 2010

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

IEnumerable sortedList = myScriptCellsCount.MyCellsCharactersCount.OrderBy(anInt => anInt);
0 голосов
/ 16 октября 2012

Взгляните на этот ответ .Вы можете заменить «Обработать» вашим объектом, получив typeOf вашего Списка.

Cheers

0 голосов
/ 08 августа 2012
var sorted = from i in MyCellsCharacterCount orderby i descending select i;
...