我有以下課程
public class NewsLetter
{
public string FileName { get; set; }
}
public class Folder
{
public Folder()
{
this.NewsLetter = new HashSet<NewsLetter>();
}
public string FolderName { get; set; }
public virtual ICollection<NewsLetter> NewsLetter { get; set;}
}
在我的控制器中,我創建了時事通訊目錄中所有子目錄的 List<Folder>,目錄是從 2006 年開始到現在的年份,以及每個子目錄中的每個檔案。這些檔案都是 pdf 檔案,檔案名稱中以 2 位數的月份開頭。我想反轉目錄和檔案的排序,以便最新的總是在最前面。
這是我的控制器代碼
public ActionResult Index()
{
try
{
string path = Server.MapPath("/Newsletters/");
string[] folderPaths = Directory.GetDirectories(path);
List<Folder> fldrs = new List<Folder>();
foreach(string folder in folderPaths)
{
Folder fldr = new Folder();
List<Newsletter> newsletters = new List<Newsletter>();
string thisFolder = Path.GetFileName(folder);
string[] filePaths = Directory.GetFiles(folder);
foreach(string newsletter in filePaths)
{
Newsletter nl = new Newsletter();
nl.FileName = Path.GetFileName(newsletter);
newsletters.Add(nl);
}
fldr.FolderName = thisFolder;
fldr.Newsletter = newsletters;
fldrs.Add(fldr);
//fldrs.Reverse();
}
return View(fldrs);
}
catch (Exception ex)
{
Errors.ErrorOccured(ex);
}
return RedirectToAction("Index", "Error", new { Area = "" });
}
這作業正常,所有年份和其中的檔案夾都顯示在視圖中。但是,它們是按時間順序顯示的,我需要扭轉它。
這就是我所看到的
2021
01-Jan.pdf
02-Feb.pdf
03-Mar.pdf
04-Apr.pdf
05-May.pdf
06-Jun.pdf
07-Jul.pdf
08-Aug.pdf
09-Sep.pdf
10-Oct.pdf
11-Nov.pdf
12-Dec.pdf
2022
01-Jan.pdf
...snipped for brevity
我遇到的問題是反轉排序。如果取消注釋注釋掉的行 fldrs.Reverse() 我只會將年份反轉為偶數年。然后按順序列出所有奇數年份。但是,其中的檔案仍按時間順序排列。那么我該如何將輸出反轉為我想要的顯示呢?
我想要的最終輸出是
2022
11-Nov.pdf
10-Oct.pdf
...snipped for brevity
01-Jan.pdf
2021
12-Dec.pdf
...snipped for brevity
01-Jan.pdf
ETC...
uj5u.com熱心網友回復:
需要分別反轉檔案夾串列和檔案串列:
public ActionResult Index()
{
try
{
string path = Server.MapPath("/Newsletters/");
string[] folderPaths = Directory.GetDirectories(path);
List<Folder> fldrs = new List<Folder>();
foreach(string folder in folderPaths.Reverse()) // <--- REVERS
{
Folder fldr = new Folder();
List<Newsletter> newsletters = new List<Newsletter>();
string thisFolder = Path.GetFileName(folder);
string[] filePaths = Directory.GetFiles(folder);
foreach(string newsletter in filePaths.Reverse()) // <--- REVERS
{
Newsletter nl = new Newsletter();
nl.FileName = Path.GetFileName(newsletter);
newsletters.Add(nl);
}
fldr.FolderName = thisFolder;
fldr.Newsletter = newsletters;
fldrs.Add(fldr);
}
return View(fldrs);
}
catch (Exception ex)
{
Errors.ErrorOccured(ex);
}
return RedirectToAction("Index", "Error", new { Area = "" });
}
但是,我建議使用 LINQ 方法OrderBy()/OrderByDescending()以升序或降序對元素進行排序。由于檔案夾/檔案的原始串列按 Windows 升序排序。但是,如果將使用此代碼,例如在 LINUX 上,結果會有所不同。
Enumerable.OrderBy 方法
Enumerable.OrderByDescending 方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532158.html
上一篇:ASP.NETMVC中的下拉串列
下一篇:單選按鈕相互重疊
