【问题标题】:C# Reorder Directory.GetFiles result from the list of another objectC# Reorder Directory.GetFiles 结果来自另一个对象的列表
【发布时间】:2014-09-30 10:08:46
【问题描述】:

我想从特定文件夹中获取文件以便在轮播中显示它们,所以我正在使用:

string[] files = Directory.GetFiles("path/to/my/folder")

但是,这些文件在files[] 中按名称排序

在我的页面(强类型视图)中,我的Model 包含十几个属性,包括一个由要显示的图片填充的List<FileModel> filesToDisplayFileModel 是一个自定义模型,它包含名称、大小、布尔值IsMain 和其他一些图片属性。

另一方面,filesToDisplay 列表是从我的数据库中填充的,我将在其中搜索我必须显示的图片。所有的图片都在同一个目录下,但是我不能总是显示这个目录下的所有图片;这就是我搜索要显示的数据库的原因。

我的目标是在我的轮播中显示文件:

  • 图片中IsMain 在第一位置为真。 总是只有一张图片,IsMain 为真
  • 然后,作为第二张图片,第一张IsMain为假的图片来自filesToDisplay
  • 然后作为第三张图片,第二张图片IsMain为假来自filesToDisplay

等等...
当然,filesToDisplay 中的顺序可能(并且几乎总是)不同于 files[]

所以,我想做这样的事情:

files.OrderBy(filesToDisplay.IsMain).ThenBy(filesToDisplay(x => !x.IsMain))

这当然是不可能的。

如何用“正确”的 C# 来表达它? 感谢您的帮助!

(是的,我已经看到与我非常接近的this SO questionthis one,但我无法根据我的问题调整答案)。抱歉新手问题。

【问题讨论】:

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


    【解决方案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 连接,其中sortedFiles 序列使用来自filesToDisplay 序列的现有订单。

    (假设FileModel 拥有FileName 并且string[] files 中的每个条目都是包含文件名的文件路径。
    例如。 FileModel FileName: Picture1.jpg, files[0]: C:/RandomPath/Images/Picture1.jpg 因为您需要一个值来将files[] 中的每个文件链接到filesToDisplay 中的每个FileModel。)

    【讨论】:

    • 非常感谢;经过非常小的适应以适合我的模型后,这完全可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    相关资源
    最近更新 更多