我正在为我们的客户服务部门开发应用程序。用户将输入打印编号和制造日期。然后,应用程序将执行get文件,返回使用该图号(多个修订版)找到的所有文件的结果。文件以此格式drawingnumber_rev_pages_6-digit date.pdf
命名。
一旦我有了该图号的列表,然后我取一个10个字符的正确(字符串)来删除6位数的日期,然后进行Date.ParseExact
以与用户输入的mfg日期进行比较。我在那个日期之前抓住了任何东西,然后在列表框中显示它们。标准现在已经改变,他们希望我只显示与该构建日期相关的文件。问题是,我需要在该日期之前的第一次转速。而且我不完全理解我的getfiles语句的(函数)部分。所以我不知道要搜索甚至查找谷歌搜索结果的内容。当我搜索getfiles时,函数没有被提及,如果我查找orderby ...函数没有提到,是不是我需要搜索linq?你怎么建议我接近这个?
original version example
新版本,我可以过滤结果并在日期之前找到所有内容......但我想要的是制造商之前的最高版本。日期。返回一个结果。
current version
谢谢大家 - 这是我的示例代码。
Try
Dim results = Directory.GetFiles(fp, f).
OrderByDescending(Function(x) New FileInfo(x).FullName)
For Each result In results
Dim dp As String = ""
Dim d As Date
dp = Strings.Right(result, 10)
dp = Strings.Left(dp, 6)
d = Date.ParseExact(dp, "MMddyy", New Globalization.CultureInfo("en-us"))
Debug.Print(dp)
Debug.Print(d)
Dim udt As String = ""
Dim ud As Date 'user date
udt = Trim(Replace(txtMfgDate.Text, "/", ""))
If udt.ToString.Length = 0 Then lstFound.Items.Add(result)
ud = Date.ParseExact(udt, "MMddyy", New Globalization.CultureInfo("en-us"))
If d.Date <= ud.Date Then
lstFound.Items.Add(result)
End If
Debug.Print(d)
Debug.Print(ud)
If result <> Nothing Then
End If
Next
Catch x As Exception
MessageBox.Show("Error finding file: " & f)
End Try
答案 0 :(得分:0)
LINQ可以在合适的条件下完成您所需的一切。我还试图以其他方式清理一些代码。我将LINQ表达式切换为查询理解,因此我可以使用Let
。
Try
Dim enusCulture = New Globalization.CultureInfo("en-us") ' consider CultureInfo.CurrentCulture instead?
Dim udt As String = Trim(Replace(txtMfgDate.Text, "/", ""))
Dim ud As Date
If udt.Length > 0 Then ud = Date.ParseExact(udt, "MMddyy", enusCulture) ' user mfg date
' 0071911_a_1_072115.pdf
Dim results = From filename In Directory.GetFiles(fp, f)
Let filedate = Date.ParseExact(filename.Substring(filename.Length - 10, 6), "MMddyy", enusCulture)
Where udt.Length = 0 OrElse filedate.Date < ud.Date
Order By filedate Descending
If udt.Length> 0 Then
results = results.Take(1)
End If
lstFound.Items.AddRange(results)
Catch x As Exception
MessageBox.Show("Error finding file: " & f)
End Try
Function(x)
语法是一个lambda表达式,如果你想研究它,它是OrderByDescending
函数的LINQ方法语法的一部分。