C#重新排序Directory.GetFiles来自另一个对象的列表

时间:2014-09-30 10:08:47

标签: c# asp.net asp.net-mvc sorting

我想从特定文件夹中获取文件,以便在旋转木马中显示这些文件,因此我使用:

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 questionthis one,这与我非常接近,但我无法适应我的问题的答案)。对不起新手问题。

1 个答案:

答案 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拥有FileModelFileName中的每个条目都是包含文件名的filePath。 例如。 FileModel FileName:Picture1.jpg,files [0]:C:/RandomPath/Images/Picture1.jpg因为您需要一个值来将string[] files中的每个文件链接到files[]中的每个FileModel }。)