繁体   English   中英

使用Linq检查C#中的目录

[英]Check Directories in C# using Linq

有人可以告诉我,我对以下Linq查询做错了吗? 我正在尝试找到具有最高aphanumerical值的目录。

        DirectoryInfo[] diList = currentDirectory.GetDirectories();

        var dirs = from eachDir in diList
                   orderby eachDir.FullName descending                    
                   select eachDir;
        MessageBox.Show(dirs[0].FullName);

编辑:

上面的代码没有编译,编译器生成的错误是:

Cannot apply indexing with [] to an expression of type 'System.Linq.IOrderedEnumerable<System.IO.DirectoryInfo>

您正在尝试访问dirs ,就像它是一个数组或列表一样。 它只是一个IEnumerable<T> 试试这个:

var dirs = diList.OrderByDescending(eachDir => eachDir.FullName);
var first = dirs.FirstOrDefault();
// Now first will be null if there are no directories, or the first one otherwise

请注意,我没有在这里使用查询表达式,因为对于单个子句来说它似乎没有意义。 您也可以将它全部放入一个语句中:

var first = currentDirectory.GetDirectories()
                            .OrderByDescending(eachDir => eachDir.FullName)
                            .FirstOrDefault();

如果你没有使用var ,错误的原因会更清楚。

    IEnumerable<DirectoryInfo> dirs = from eachDir in diList 
               orderby eachDir.FullName descending                     
               select eachDir; 
    MessageBox.Show(dirs[0].FullName);

这只是不读取错误消息的情况。

代码无法编译,并产生以下错误消息:

Cannot apply indexing with [] to an expression of type 'System.Linq.IOrderedEnumerable<System.IO.DirectoryInfo>'

换句话说, [..]部分不能使用可枚举,这是使用Linq查询的结果。

你有多种选择,但这里有两个:

  • 转换为数组,然后选择第一个元素
  • 使用Linq扩展方法获取第一个

我认为第一种方法是一个糟糕的选择,所以这是代码与第二种方式的关系:

DirectoryInfo[] diList = currentDirectory.GetDirectories();

var dirs = from eachDir in diList
           orderby eachDir.FullName descending                    
           select eachDir;
var dir = dirs.FirstOrDefault();
if (dir != null)
    MessageBox.Show(dir.FullName);

使用

    DirectoryInfo[] diList = currentDirectory.GetDirectories();

    var dir = (from eachDir in diList
               orderby eachDir.FullName descending                    
               select eachDir).FirstOrDefault();
    if (dir != null)
    MessageBox.Show(dir.FullName);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM