我通過調用GetDirectories()LINQ到篩選目錄
Ç得到followwing direcories \程序\ 20090531 \ C:\程序\ 20090630 \ C:\程序\ 20090731 \ C:\程序\ 20090831 \
我想20090531和20090731的目錄,我如何通過LINQ的做呢? 謝謝!
我通過調用GetDirectories()LINQ到篩選目錄
Ç得到followwing direcories \程序\ 20090531 \ C:\程序\ 20090630 \ C:\程序\ 20090731 \ C:\程序\ 20090831 \
我想20090531和20090731的目錄,我如何通過LINQ的做呢? 謝謝!
使用LINQ 。凡聲明和String.Compare與X你最小和最大的目錄名稱(字符串)之間(字符串)。
不要打擾使用等等.Parse,只是做字符串比較 - 你的目錄名稱是數字反正,所以當你只能使用直接值比較無法解析每個。
var query = directories
.Where(x => {
return (String.Compare(x, @"c:\app\20090531") > 0 && String.Compare(x, @"c:\app\20090731") < 0)
});
。凡(X => X> 「C:\應用\ 20090531」 & & X < 「C:\應用\ 20090731」)ToList()
的tolist是如果希望在一個。名單。如果你對IEnumerable沒有問題,就不要關閉它。
有更優雅的方法(解析日期等),但這應該完成它。 – 2009-08-18 01:53:09
我:運營商「>」不能應用於操作數的類型「字符串」和「串」
你會想在那裏插入你自己的邏輯。編寫一個方法,該方法接受一個字符串並返回該路徑是否有效的布爾值,然後在你的lambda中調用該方法。 – 2009-08-18 02:19:57
啊,太對了。對於那個很抱歉。我比lambda比較更專注於lambda。 – 2009-08-19 15:38:06
var query = directories
.Where(d => {
int directoryNumber = int.Parse(d.Replace(@"c:\app\", string.Empty)
.Replace("\\", string.Empty));
return directoryNumber > 20090531 && directoryNumber < 20090731;
});
您還可以,如果需要轉換爲DateTime的。
編輯:顯然是stackoverflow,或任何解析它使用不喜歡我的逐字字符串。
您寫的查詢不起作用,Lambda不會返回任何內容,您不會轉義'\',並且您的第一個字符串的格式不相同。但比較應該工作 – 2009-08-18 03:23:16
哎呀謝謝。編輯爲sloppiness。 – jscharf 2009-08-18 03:34:28