2010-10-05 86 views
1

我有一個解決方案文件夾,其中我收集所有.dll的並存儲在數組列表中。我必須搜索所有子目錄。請在編寫LINQ查詢時提供幫助。任何人都可以幫我編寫LINQ查詢嗎?

 
var r = dir.GetFiles("*.dll").Where<FileInfo>(i => i.Name.StartsWith("SAMPLE")).ToList(); 

這是正確的。例如我20 DLL的startwith名稱「SAMPLE」

回答

8

我想你使用EnumerateFiles方法建議:

var r = Directory 
    .EnumerateFiles(@"c:\work", "*.dll", SearchOption.AllDirectories) 
    .Where(file => file.StartsWith("SAMPLE")) 
    .ToList(); 

甚至更​​好的使用通配符模式來過濾而不是過濾內存:

var r = Directory 
    .EnumerateFiles(@"c:\work", "SAMPLE*.dll", SearchOption.AllDirectories) 
    .ToList(); 
+0

雖然我得到的文件也得到重複也。如何刪除重複? – 2010-10-05 11:45:57

+0

var r =目錄 .EnumerateFiles(@「c:\ work」,「SAMPLE * .dll」,SearchOption.AllDirectories).Select(a => a.Filename).Distinct()。ToList(); * r *將包含一個包含所有文件名的列表集合。 – Michael 2010-10-05 15:43:59

0

是的,你的LINQ是正確的。它應該工作正常。 小改正:你不需要那裏的tye參數。 (編譯器可以推斷出它。)

var list = dir.GetFiles("*.dll").Where(i => i.Name.StartsWith("SAMPLE")).ToList(); 
0

是的,這是正確的。

我很快創建了類似的代碼來測試自己,它的工作原理。

DirectoryInfo dir = new DirectoryInfo(@"C:\Test"); 
var files = dir.GetFiles("*.jpg").Where<FileInfo>(i => i.Name.StartsWith("Tet")).ToList(); 

files.ForEach(file => Console.WriteLine(file.Name)); 
+0

感謝所有人 – 2010-10-05 12:46:24

相關問題