linq à sql: compréhension Select
et SelectMany
La maîtrise LINQ à SQL nécessite de comprendre les différences clés entre Select
et SelectMany
. Les deux données de projet, mais leurs approches diffèrent considérablement.
Select
effectue une transformation individuelle. Il prend chaque élément d'une séquence d'entrée et applique une fonction pour produire un nouvel élément dans la séquence de sortie. Ceci est idéal pour extraire des propriétés spécifiques ou effectuer des calculs sur les éléments individuels.
SelectMany
, en revanche, aplatit une séquence de séquences en une seule séquence. Ceci est inestimable lorsque vous travaillez avec des structures de données hiérarchiques ou imbriquées. Il vous permet de traverser plusieurs niveaux et d'accéder aux éléments sous-jacents.
illustrons une classe Person
contenant une collection d'objets PhoneNumber
:
<code class="language-csharp">public class PhoneNumber { public string Number { get; set; } } public class Person { public IEnumerable<PhoneNumber> PhoneNumbers { get; set; } public string Name { get; set; } }</code>
Select
Exemple:
<code class="language-csharp">IEnumerable<IEnumerable<PhoneNumber>> phoneLists = people.Select(p => p.PhoneNumbers);</code>
Ceci utilise Select
pour obtenir une séquence de séquences de numéros de téléphone - une pour chaque personne. Le résultat reste imbriqué.
SelectMany
Exemple:
<code class="language-csharp">IEnumerable<PhoneNumber> phoneNumbers = people.SelectMany(p => p.PhoneNumbers);</code>
SelectMany
aplatit la structure imbriquée, produisant une seule séquence contenant tous les numéros de téléphone de toutes les personnes.
combinant les données des parents et des enfants avec SelectMany
:
Une caractéristique puissante de SelectMany
est sa capacité à incorporer les données parentales dans la projection. En utilisant la surcharge avec un deuxième paramètre, vous pouvez créer un nouvel objet combinant les propriétés des parents et des enfants:
<code class="language-csharp">var directory = people .SelectMany(p => p.PhoneNumbers, (parent, child) => new { parent.Name, child.Number });</code>
Cela génère un répertoire répertoriant le nom de chaque personne et ses numéros de téléphone associés. La sortie combine les données des classes Person
et PhoneNumber
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!