2010-10-05 83 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

相关问题