Comment obtenir la valeur de IEnumerable collection à l'aide de sa Clé?
J'ai IEnumerable collection comme suit
IEnumerable<Customer> items = new Customer[]
{
new Customer { Name = "test1", Id = 999 },
new Customer { Name = "test2", Id = 989 }
};
Je veux obtenir une valeur à l'aide de la touche Id
J'ai essayé comme suit
public int GetValue(IEnumerable<T> items,string propertyName)
{
for (int i = 0; i < items.Count(); i++)
{
(typeof(T).GetType().GetProperty(propertyName).GetValue(typeof(T), null));
//I will pass propertyName as Id and want all Id propperty values
//from items collection one by one.
}
}
Pourquoi ne pas simplement utiliser la méthode de sélection? Il est de type sécurisé.
dynamiclinq.codeplex.com
Si vous voulez le faire dans un "générique", vous pouvez fournir un Func<T, bool> sélecteur (prédicat) à votre méthode au lieu de votre
items.Select(x=>x.Id)
le ferait. qu'essayez-vous de réaliser?dynamiclinq.codeplex.com
Si vous voulez le faire dans un "générique", vous pouvez fournir un Func<T, bool> sélecteur (prédicat) à votre méthode au lieu de votre
propertyName
argument et utilisez-la dans le linq clause where. Même avec ce que vous avez besoin de sélectionner. Si c'est l'ensemble de T
point, vous n'avez pas besoin d'un select
mais si vous avez besoin d'une propriété spécifique, passer à un autre sélecteur de fonction (de type Func<T, whatever type>
)OriginalL'auteur Neo | 2015-08-24
Vous devez vous connecter pour publier un commentaire.
Si je vous comprends bien
OriginalL'auteur Eser
Si vous souhaitez récupérer un
Customer
nom à partir d'une collection par sonId
:c.Id
je suisc.
d'égal à Égal,GetHashCode,GetType,ToStringprobablement parce que vous interrogez sur
IEnumerable<object>
, pasIEnumerable<Customer>
, essayez quelque chose commecustomers.OfType<Customer>()
OriginalL'auteur w.b
À l'aide de
LINQ
vous pouvez obtenir tous les noms des clients (valeurs) ayant l'Id (clé) de cette façon:Pour un seul nom de client, vous pouvez le faire:
Évidemment, l'Id peut être de 1, 2 ou n'importe quel autre.
Edit:
Je vous recommande
List<Customer>
au lieu deCustomer[]
Donc,
x.Id
je suisx.
d'égal à Égal,GetHashCode,GetType,ToStringUtilisez un casting comme
(Customer)x.Id
.J'ai editted ma réponse, s'il vous plaît vérifier
Si vous utilisez
List<Customer>
alors maintenant besoin pour n'importe quel casting sinon casting nécessaire pour le type anonyme.pouvez-vous s'il vous plaît regarder dans un de mes question lié à elle?
OriginalL'auteur NASSER
Suffit d'utiliser LINQ pour atteindre ce que vous voulez faire. si vous souhaitez récupérer une valeur spécifique, vous pouvez utiliser
where
comme ceci:cela permettra de récupérer les clients qui correspondent à un code spécifique.
OriginalL'auteur Nadeem Khoury
Voulez-vous regarder les choses en place à plusieurs reprises après la création de la liste? Si oui, vous pourriez envisager de créer un dictionnaire pour faire les recherches, comme suit:
Je suis en supposant que vous ne créez pas de la collection dans la première place - si vous aviez le contrôle sur la création de la collection originale vous pouvez utiliser un dictionnaire en premier lieu.
OriginalL'auteur Matthew Watson