8
votes

Comment puis-je accéder à l'index de la boucle à l'intérieur d'une sélection de LINQ?

Ce code: strud> xxx pré>

donne ces résultats: strong> p>

Argentina has 3 customers: 1. Cactus Comidas para llevar, 2. Océano Atlántico Ltda., 3. Rancho grande
...


0 commentaires

3 Réponses :


16
votes
customers.ToList().ForEach(g => Console.WriteLine("{0} has {1} customers: {2}",
    g.Country, 
    g.Customers.Count(), 
    string.Join(", ",
        g.Customers.Select((x, i) => i + ". " + x.CompanyName).ToArray())));

4 commentaires

Très intéressant, cela fonctionne, où est-ce que je suis incrémenté en fait?


@Edward: Jetez un coup d'œil à cela. Il explique la sélection de Linq avec un paramètre Lambda à deux paramètres. weblogs.asp.net/fmarguerie/archive/2008/11/10/...


@Edward, je suis incrémenté en interne dans la méthode de sélection de sélection et la nouvelle valeur est transmise pour chaque valeur.


Génial, jamais connu à ce sujet! Merci!!



2
votes

Essayez de faire un int x = 0; avant votre relevé LINQ. Ensuite, dans, imprimé (x ++). Tostring ().

Cela fera x une fermeture.


3 commentaires

Très pratique, en particulier dans mon projet où j'ai besoin de compter de 1 et plus.


@ La réponse de Lukeh est meilleure, cependant, n'est-ce pas? Vous pouvez simplement utiliser (i + 1) au lieu de i donc être basé sur 1.


une meilleure réponse? Peut-être, mais aussi visuellement plus complexe. Pour mon projet non-base de données, à l'aide d'une grande structure Linq avec beaucoup de Nouveaux xelement , le .Sélectionnez n'est pas très pratique et les autres réponses sont plus applicables. Peut-être à cause d'un manque de compréhension de Linq ...



1
votes

Vous pouvez le faire pour rechercher la valeur d'index itérateur:

var customers = from cust in Customers
//Get Current Index
let currIndex = Customers.IndexOf(cust)
//You can then make use of the index in the Variable currIndex


2 commentaires

C'est un peu à l'envers pour faire une recherche de chaque itération, mais pour de petits projets ce n'est pas un problème du tout. Dans mon projet actuel, je dois faire une liste des pièces jointes de messagerie et le nombre d'articles est très faible, rarement fini, par exemple, 5


Vous pouvez utiliser la méthode Linq "Compter ()" avec une Lambda. Donc, vous pouvez faire quelque chose comme: Var CustomerCount = clients.count (C => C.CountryID == {CntryID});