2009-08-18 73 views
2

我通過調用GetDirectories()LINQ到篩選目錄

Ç得到followwing direcories \程序\ 20090531 \ C:\程序\ 20090630 \ C:\程序\ 20090731 \ C:\程序\ 20090831 \

我想20090531和20090731的目錄,我如何通過LINQ的做呢? 謝謝!

回答

1

使用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) 
    }); 
+0

您寫的查詢不起作用,Lambda不會返回任何內容,您不會轉義'\',並且您的第一個字符串的格式不相同。但比較應該工作 – 2009-08-18 03:23:16

+0

哎呀謝謝。編輯爲sloppiness。 – jscharf 2009-08-18 03:34:28

3

。凡(X => X> 「C:\應用\ 20090531」 & & X < 「C:\應用\ 20090731」)ToList()

的tolist是如果希望在一個。名單。如果你對IEnumerable沒有問題,就不要關閉它。

+0

有更優雅的方法(解析日期等),但這應該完成它。 – 2009-08-18 01:53:09

0

我:運營商「>」不能應用於操作數的類型「字符串」和「串」

+0

你會想在那裏插入你自己的邏輯。編寫一個方法,該方法接受一個字符串並返回該路徑是否有效的布爾值,然後在你的lambda中調用該方法。 – 2009-08-18 02:19:57

+0

啊,太對了。對於那個很抱歉。我比lambda比較更專注於lambda。 – 2009-08-19 15:38:06

0
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,或任何解析它使用不喜歡我的逐字字符串。