2010-10-05 3 views
1

J'ai un dossier de solution dans lequel j'ai rassemblé tous les .dll et stockez dans une liste de tableau. Je dois rechercher tous les sous-annuaires. Veuillez aider en écrivant la question de LINQ.Quelqu'un peut-il m'aider à écrire la requête LINQ?

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

Est-ce correct, par exemple i "échantillon" de 20 dll Nom de startwith

Répondre

8

Je vous recommande d'utiliser la méthode EnumerateFiles:

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

ou même utiliser mieux le modèle générique pour filtrer au lieu de filtrer en mémoire:

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

tout en obtenant le fichier suis obtenir également les doublons. Comment supprimer les doublons? –

+0

var r = Répertoire .EnumerateFiles (@ "c: \ work", "SAMPLE * .dll", SearchOption.AllDirectories) .Sélectionnez (a => a.Fichier) .Distinct(). ToList(); * r * contiendra une collection List contenant tous les noms de fichiers. – Michael

0

Oui, votre LINQ est correct. Cela devrait fonctionner correctement. Petite correction: vous n'avez pas besoin du paramètre tye. (Le compilateur peut l'inférer.)

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

Oui, c'est correct.

J'ai rapidement créé un code similaire pour tester moi-même et cela fonctionne.

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

Merci à tous –