40 votes

assigner une valeur en utilisant linq

public class Company
{
    public int id { get; set; }
    public int Name { get; set; }
}

List<Company> listofCompany = new List<Company>();

Voici ma collection de listes de sociétés. Je veux attribuer des valeurs à la propriété Name en utilisant LINQ.

listofCompany.Where(d => d.Id = 1);

(Je veux assing le nom de la propriété de l'entreprise id 1)

comment puis-je l'attribuer ?

122voto

Aliostad Points 47792

En utilisant Linq serait :

 listOfCompany.Where(c=> c.id == 1).FirstOrDefault().Name = "Whatever Name";

UPDATE

Cela peut être simplifié pour être...

 listOfCompany.FirstOrDefault(c=> c.id == 1).Name = "Whatever Name";

UPDATE

Pour plusieurs articles (la condition est remplie par plusieurs articles) :

 listOfCompany.Where(c=> c.id == 1).ToList().ForEach(cc => cc.Name = "Whatever Name");

0 votes

Comment réaliser la requête suivante pour plusieurs éléments listOfCompany.Where(c=> c.id == 1).FirstOrDefault().Name = "Whatever Name" ;

2 votes

Vous pouvez raccourcir votre premier exemple en listOfCompany.FirstOrDefault(c=> c.id == 1).Name = "Whatever Name";

3 votes

C'est en fait très utile. Je me demandais comment on peut définir plus d'une valeur de variable à la fois. Mon objet a en fait deux variables que je dois définir en une seule fois.

7voto

TcKs Points 13249

Vous pouvez créer une méthode d'extension :

public static IEnumerable<T> Do<T>(this IEnumerable<T> self, Action<T> action) {
    foreach(var item in self) {
        action(item);
        yield return item;
    }
}

Et ensuite l'utiliser dans le code :

listofCompany.Do(d=>d.Id = 1);
listofCompany.Where(d=>d.Name.Contains("Inc")).Do(d=>d.Id = 1);

1 votes

BTW : Argument 1 : ne peut pas convertir de System.Collections.Generic.IEnumerable<T> à T

3voto

mini998 Points 433

On peut aussi le faire de cette façon

foreach (Company company in listofCompany.Where(d => d.Id = 1)).ToList())
                {
                    //do your stuff here
                    company.Id= 2;
                    company.Name= "Sample"
                }

1voto

Sachez qu'il ne met à jour que la première entreprise qu'il a trouvée avec l'identifiant 1. Pour les entreprises multiples

 (from c in listOfCompany where c.id == 1 select c).First().Name = "Whatever Name";

Pour de multiples mises à jour

 from c in listOfCompany where c.id == 1 select c => {c.Name = "Whatever Name";  return c;}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X