我想从特定文件夹中获取文件,以便在旋转木马中显示这些文件,因此我使用:
string[] files = Directory.GetFiles("path/to/my/folder")
但是,文件按其名称files[]
在我的页面(强类型视图)中,我的Model
包含十几个属性,包括List<FileModel> filesToDisplay
,其中显示了要显示的图片。 FileModel
是一个自定义模型,它包含名称,大小,布尔值IsMain
和其他一些图片属性。
另一方面,filesToDisplay
列表从我的数据库填充,我将在其中搜索我必须显示的图片。所有图片都在同一目录中,但我无法始终显示该目录的所有图片;这就是为什么我要搜索要显示哪些数据库的原因。
我的目标是在我的轮播中显示文件:
IsMain
为真的图片。 始终只有一张IsMain
为真的图片IsMain
filesToDisplay
为假的第一张图片
IsMain
filesToDisplay
为假的seconde图片
等...
当然,filesToDisplay
中的顺序可能(并且几乎总是)与files[]
不同
所以,我想做这样的事情:
files.OrderBy(filesToDisplay.IsMain).ThenBy(filesToDisplay(x => !x.IsMain))
这当然是不可能的。
我如何在&#34;正确&#34;中表达它? C# ? 谢谢你的帮助!
(是的,我已经看过this SO question或this one,这与我非常接近,但我无法适应我的问题的答案)。对不起新手问题。
答案 0 :(得分:1)
我的理解是您希望排序的文件与要显示的文件的顺序相同,只是您希望IsMain成为第一个。我认为这段代码应该满足这个要求;
string[] files = Directory.GetFiles("path/to/my/folder");
var sortedFiles = (from o in filesToDisplay
join i in files
on o.Name equals Path.GetFileName(i)
orderby o.IsMain descending
select i).ToArray();
这将首先按IsMain
对排序后的文件进行排序,其中总是有一个,这样就转到了数组中的第一个元素,然后排序的其余部分是通过LINQ连接{{1} } sequence使用sortedFiles
序列中的现有顺序。
(这假设filesToDisplay
拥有FileModel
,FileName
中的每个条目都是包含文件名的filePath。
例如。 FileModel FileName:Picture1.jpg,files [0]:C:/RandomPath/Images/Picture1.jpg因为您需要一个值来将string[] files
中的每个文件链接到files[]
中的每个FileModel
}。)