2013-03-29 2 views
0

Si j'ai une liste d'objets avec, disons, 10 propriétés, et je veux retourner une liste de ces objets mais avec seulement 3 propriétés des 10 disponibles, comment Je fais ça?Renvoyer seulement quelques propriétés d'un objet

public class Example 
{ 
    public int attr1 {get;set;} 
    public int attr2 {get;set;} 
    public int attr3 {get;set;} 
    public int attr4 {get;set;} 
    public int attr5 {get;set;} 
} 

return ExampleList; //have the return value be a list with only attr1, 2, and 3 visible. 
+0

http://msdn.microsoft.com/fr-fr/library/vstudio/bb397696.aspx –

Répondre

4

Vous pouvez utiliser LINQ avec la méthode Select et retour anonymous type:

var result = ExampleList.Select(x => new { x.attr1, x.attr2, x.attr3 }); 

Ou, définir explicitement votre propre classe avec 3 propriétés, ce cas est d'habitude si vous convertissez de domaine entité à voir le modèle ou objet DTO:

class Dto 
{ 
    public int Pro1 { get; set; } 
    public int Pro2 { get; set; } 
    public int Pro3 { get; set; } 
} 

var result = ExampleList.Select(x => new Dto { 
             Pro1 = x.attr1, 
             Pro2 = x.attr2, 
             Pro3 = x.attr3 
            }); 

Ou si vous voulez juste une classe dump, vous pouvez utiliser Tuple:

var result = ExampleList.Select(x => Tuple.Create(x.attr1, x.attr2, x.attr3)); 
+0

+1 pour être le premier à publier cette réponse –

+0

C'est ce que je cherche, mais pourquoi, dans le premier exemple (l'exemple de type anonyme) puis-je obtenir l'erreur "Les arguments de type ne peuvent être déduits de l'utilisation"? – proseidon

+0

@proseidon: J'ai modifié ma réponse –

0

Faire les propriétés annulable et utiliser Object Initializers.

public class Example 
{ 
    public int? attr1 {get;set;} 
    public int? attr2 {get;set;} 
    public int? attr3 {get;set;} 
    public int? attr4 {get;set;} 
    public int? attr5 {get;set;} 
} 
0

Utilisez l'opérateur de projection LINQ:

var resultList = ExampleList.Select(x => new 
    { 
     x.attr1, 
     x.attr2, 
     x.attr3 
    }); 

Ou si vous avez besoin de spécifier un autre nom prop:

var resultList = ExampleList.Select(x => new 
    { 
     PropName1 = x.attr1, 
     PropName2 = x.attr2, 
     PropName2 = x.attr3, // <- The last comma can be leaved here. 
    }); 

Faites attention qui a donné lieu dénombrable est pas de type Example mais avant compile (pas runtime) créé type anonyme.

Questions connexes