web-dev-qa-db-fra.com

LINQ Comment sélectionner plus d'une propriété dans une expression lambda?

Nous utilisons souvent l'expression lambda suivante

MyList.Select(x => x.Id).ToList();

Est-il possible d'obtenir plus d'une propriété en utilisant l'expression lambda? E.g Id et Name de MyList?

Je sais que je peux utiliser la syntaxe suivante:

(from item in MyList
 select new { item.Id, item.Name }).ToList();

Puis-je faire la même chose en utilisant l'expression lambda?

14
Tony
MyList.Select(x => new { x.Id, x.Name }).ToList();
39
Anthony Pegram

La fonctionnalité qui vous intéresse est celle du C # 3/ Types anonymes

Vous pouvez créer une nouvelle instance de type anonyme avec:

var v = new { Amount = 108, Message = "Hello", this.Text };

Bien sûr, cela fonctionne aussi comme une lamda:

SomeThing.Select( () => new {X=1,Y=2} )

n'importe où dans votre code. Il récupère également les noms de propriété, auquel cas vous n'avez pas besoin de le spécifier explicitement (le troisième membre du type anonyme de mon exemple s'appelle automatiquement Text.

Malheureusement, vous ne pouvez pas les utiliser comme type de retour non générique d'une fonction.

3
CodesInChaos
var sample = dbcontext.MyList
                      .Select(m => new Mylist{ sampleid=m.sampleid,item=m.item })
                      .ToList();
1
Srinivas