如何在linq中对myScriptCellsCount.MyCellsCharactersCount(list int type)进行排序
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);
}
答案 0 :(得分:9)
// using Linq
MyCellsCharactersCount.OrderBy(x => x); // ascending
MyCellsCharactersCount.OrderByDescending(x => x); // descending
或
// not using Linq
MyCellsCharactersCount.Sort(); // ascending
MyCellsCharactersCount.Sort().Reverse(); // descending
答案 1 :(得分:8)
您可以使用OrderBy或Sort,但您应该理解的2之间存在差异:
如果您进行排序,它会对您的列表进行“就地”排序,因此在此示例中,变量“list”将被排序:
// 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()
这将强制枚举器运行,并将结果存储在sorted。
中如果您只想枚举一次,则可以省略ToList / ToArray调用。
答案 2 :(得分:1)
您应该可以在列表中使用OrderBy方法。
IEnumerable sortedList = myScriptCellsCount.MyCellsCharactersCount.OrderBy(anInt => anInt);
答案 3 :(得分:0)
var sorted = from i in MyCellsCharacterCount orderby i descending select i;
答案 4 :(得分:0)
看看this answer。您可以通过获取ListOf列表来替换“对象”。
干杯