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 de la valeur en utilisant la clé 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.
}
}
// Je vais transmettre propertyName en tant qu'id et vouloir toutes les valeurs de propriété Id
// de la collection d'objets un par un.
Si je vous comprends bien
public static IEnumerable<object> GetValues<T>(IEnumerable<T> items, string propertyName)
{
Type type = typeof(T);
var prop = type.GetProperty(propertyName);
foreach (var item in items)
yield return prop.GetValue(item, null);
}
Si vous souhaitez récupérer un nom Customer
d'une collection par sa Id
:
public string GetCustomerName(IEnumerable<Customer> customers, int id)
{
return customers.First(c => c.Id == id).Name;
}
En utilisant LINQ
, vous pouvez obtenir tous les noms de clients (valeurs) ayant un identifiant spécifique (clé) de cette manière:
var valuesList = items.Where(x => x.Id == 1).Select(v => v.Name).ToList();
Pour un nom de client unique, vous pouvez faire ceci:
var singleName = items.Where(x => x.Id == 1).FirstOrDefault(v => v.Name);
De toute évidence, l'ID peut être 1, 2 ou tout autre.
Modifier:
Je vous recommande List<Customer>
au lieu de Customer[]
Alors,
var items = new List<Customer>
{
new Customer { Name = "test1", Id = 999 },
new Customer { Name = "test2", Id = 989 }
};
Utilisez simplement LINQ pour réaliser ce que vous voulez faire. Si vous voulez récupérer une valeur spécifique, vous pouvez utiliser where
comme ceci:
public Customer GetCustomerById(IEnumerable<Customer> items,int key)
{
return items.Where(x=>x.id==key)
.Select(x =>x.Name)
.First();
}
cela récupérera le client qui correspond à un identifiant spécifique.
Voulez-vous rechercher les choses à plusieurs reprises après avoir créé la liste? Si tel est le cas, vous pouvez envisager de créer un dictionnaire pour effectuer les recherches, comme suit:
IEnumerable<Customer> items = new Customer[]
{
new Customer {Name = "test1", Id = 999},
new Customer {Name = "test2", Id = 989}
};
var lookup = items.ToDictionary(itemKeySelector => itemKeySelector.Id);
var result = lookup[989];
Console.WriteLine(result.Name); // Prints "test2".
Je suppose que vous ne créez pas la collection en premier lieu - si vous aviez le contrôle sur la création de la collection originale, vous pourriez utiliser un dictionnaire en premier lieu.