2016-06-28 4 views
2

J'ai ce code.C# lambda limite avec include

return Folder.GetAllWithInclude(x => x.SubFolder).Take(5); 

Ce code renvoie 5 éléments de dossier. Ce que je veux faire est Subfolder limite à 5 au lieu de limiter le dossier à 5. Je l'ai essayé ce qui suit

return Folder.GetAllWithInclude(x => x.SubFolder.Take(5)); 

mais il ne semble pas faire l'affaire.

Je pourrais manquer la syntaxe appropriée ici.

Merci beaucoup d'avance!

+0

Sans savoir ce que 'GetAllWithInclude' retourne précisément, il pourrait y avoir de meilleures options, mais en théorie ce qui suit devrait fonctionner:' retour dossier .GetAllWithInclude (x => x.SubFolder) .SelectMany (s => s) .Take (5); ' –

+0

Hi @ Me.Name mais je dois toujours retourner les dossiers complets du dossier avec ses 5 éléments de sous-dossier. –

+0

Ah, c'est vrai. Et si le premier dossier contient 3 éléments et un second 5, il devrait retourner un dossier avec 3 et un dossier avec 2 éléments? Il semblerait que ce serait plus facile à implémenter dans la méthode 'GetAllWithInclude'. Est-ce une méthode personnalisée ou une méthode de bibliothèque que je ne connais pas? –

Répondre

2

Il n'existe aucune méthode pour Include(Where Expression). Si vous utilisez Inclure, vous chargerez toujours tous les enregistrements.

Mise à jour

vous pouvez utiliser Projection pour ce problème

Folder.Select(F => new 
     { 
      FolderName = F.FolderName, 
      SubFolders = F.SubFolders.Take(5) 
     }).ToList().Select(F => new Folder() 
     { 
      FolderName = F.FolderName, 
      SubFolders = F.SubFolders 
     }; 
+0

mais nous pouvons toujours utiliser .Take() pour limiter à droite? Je ne sais pas comment limiter le retour des sous-classes. –

+0

@JackFrother vous ne pouvez pas utiliser Take() pour inclure soit – Kahbazi