LINQ VB.Net变量未声明错误

时间:2012-05-24 22:40:47

标签: vb.net linq

我正在尝试运行这行代码:

Dim OrderedFiles() As String = Directory.GetFiles(FilePath).OrderBy(x >= x.CreationTime)

我在x上收到错误,说x未声明。

我的项目设置为Option Strict Off和Option Infer On。如果我打开Option Strict然后我从项目中获得了数千个错误(它被继承)并且我没有时间修复所有错误,但是x不再给我一个错误。我用Google搜索,直到我想把电脑扔出窗外。

任何有关如何更正此声明的帮助将不胜感激。

编辑:

我希望有一个更优雅的解决方案,但这就是我想出来解决这个特殊问题的方法。

    Dim fileList() As String = Directory.GetFiles(FilePath)
    Dim fileDate(fileList.Length - 1) As DateTime

    For i As Integer = 0 To fileList.Length - 1
        fileDate(i) = New FileInfo(fileList(i)).CreationTime
    Next

    Array.Sort(fileDate, fileList)

    With EmailTemplates_DropDownList
        .DataSource = fileList.Reverse.Take(5)
        .DataBind()
    End With

它不是特别优雅,但它确实起作用。我希望有一个单线LINQ解决方案,我只是没有LINQ的背景知道如何做这个工作,有时间去买书。

2 个答案:

答案 0 :(得分:5)

我不确定你从哪里获得这种语法:

OrderBy(x >= x.CreationTime)

几乎看起来像

的C#语法
OrderBy(x => x.CreationTime)

但我相信你会使用

OrderBy(Function(x) x.CreationTime)

这肯定是Enumerable.OrderBy中的例子。

编辑:那时你会得到一个不同的错误,根据史蒂夫的帖子......但他没有纠正语法。我怀疑你想要:

Dim OrderedFiles() As FileInfo = new DirectoryInfo(FilePath).GetFiles(). 
                                        OrderBy(Function(x) x.CreationTime).
                                        ToArray()

答案 1 :(得分:2)

Directory.GetFiles()返回指定目录中的文件名(包括其路径)。 使用x.CreationTime是不可能的,x是一个字符串

可能你应该使用DirectoryInfo

Dim di as DirectoryInfo = new DirectoryInfo(FilePath)
Dim OrderedFiles = di.GetFiles().OrderBy(Function(x) x.CreationTime).Take(3)
Dim fi as FileInfo
For each fi in OrderedFiles
    Console.WriteLine(fi.FullName)
Next