【发布时间】:2019-01-08 13:59:23
【问题描述】:
我试图在我的网站上列出的文件夹及其子文件夹中有一些 Excel (.xlsx) 文件。文件名格式如下:
2018_MyData_Day.xlsx
2018_MyData_Month.xlsx
2018_MyData_Year.xlsx
2019_MyData_Day.xlsx
2019_MyData_Month.xlsx
2019_MyData_Year.xlsx
注意:Day、Month 和 Year 是文本,不是实际数字日、月或年的占位符(以防误导)。 p>
我需要以降序文件名显示这些文件名,但按特定顺序按Year、Day 或Month 分组。因此,使用上面的列表,输出应该是:
2019_MyData_Year.xlsx
2018_MyData_Year.xlsx
2019_MyData_Day.xlsx
2018_MyData_Day.xlsx
2019_MyData_Month.xlsx
2018_MyData_Month.xlsx
我使用以下按年份和Day、Month、Year 子字符串对文件名进行排序,但子字符串的排序不正确:
var fileGroup = (
from file in Directory.EnumerateFiles(myPath, searchPattern: "*.xlsx", searchOption: SearchOption.AllDirectories)
let fileName = Path.GetFileName(file)
orderby fileName descending
select fileName
).OrderBy(f => f.Substring(f.LastIndexOf("_")))
我确定我需要一个条件,因为所需的顺序是自定义的,但我不确定如何实现它。
这是否可能或有更好的方法来实现我想要的输出?
谢谢!
【问题讨论】:
-
首先你应该像你写的那样对你的“字符串”进行分组,并且你的代码没有对你的集合进行分组。
-
所以 _year、_month 和 _day 是文件名中的固定后缀(我不确定我是否正确)?如果是这样,您可以将文件分成三个列表并排序这些 ==> filelist.Where(i => i.EndsWith("_year").OrderByDescending(i => i);
-
@MichałK。 - 我认为这就是我遇到的麻烦。我不确定如何按特定顺序对
Year、Day和Month进行分组。 -
@Martin - 是的,“_Year”、“_Day”和“_Month”是固定的文本后缀。文件名与问题中显示的完全相同,而不是像“2019_MyData_2012.xlsx”这样的名称。对于您的建议,我将不得不写三个单独的陈述,对吗?如果可能的话,我希望在一份声明中做到这一点。
-
@user2063351 然后看看我的回答:)
标签: c# .net linq lambda linq-to-sql