J'essai de faire une chose qui me semble simple :

Au lieu de faire 1 if et de faire 2 fois le même linq en ajoutant juste un take, du fait que l'ensemble des fichiers soit énuméré, j'essaie de le faire ensuite.

Avant simplification
Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
If MaxMedia<>0 then
 
Dim f = From fichier In Directory.EnumerateFiles("*", SearchOption.AllDirectories)
                    Where exts.Contains(fichier.Extension.ToLower)
                    Order By fichier.FullName Ascending.take(MaxMedia)
Else
Dim f = From fichier In Directory.EnumerateFiles("*", SearchOption.AllDirectories)
                    Where exts.Contains(fichier.Extension.ToLower)
                    Order By fichier.FullName Ascending
End if
Puis 2ème traitement pour création des objets ...

J'essai ça :
Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
Dim f = From fichier In Directory.EnumerateFiles("*", SearchOption.AllDirectories)
                    Where exts.Contains(fichier.Extension.ToLower)
                    Order By fichier.FullName Ascending
 
 If MaxMedia <> 0 Then
                f = f.Take(MaxMedia)
            End If

Mais j'obtiens un invalidCastException du fait que mon f est à l'origine un IOrderedEnumerable

existe-il un moyen "simple" ou dois-je avoir une nouvelle variable qui reprend le résultat du Take et une autre qui copie f ?