Ich habe eine IEnumerable-Sammlung wie folgt
IEnumerable<Customer> items = new Customer[]
{
new Customer { Name = "test1", Id = 999 },
new Customer { Name = "test2", Id = 989 }
};
Ich möchte mit dem Schlüssel Id
Wert erhalten
Ich versuchte es wie folgt
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.
}
}
// Ich werde propertyName als Id übergeben und möchte alle Id-Eigenschaftswerte haben
// aus der Einzelsammlung eins nach dem anderen.
Wenn ich dich richtig verstehe
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);
}
Wenn Sie einen Customer
-Namen mit einer Id
aus einer Sammlung abrufen möchten:
public string GetCustomerName(IEnumerable<Customer> customers, int id)
{
return customers.First(c => c.Id == id).Name;
}
Mit LINQ
können Sie alle Kundennamen (Werte) mit einer bestimmten ID (Schlüssel) auf folgende Weise abrufen:
var valuesList = items.Where(x => x.Id == 1).Select(v => v.Name).ToList();
Für den Namen eines einzelnen Kunden können Sie Folgendes tun:
var singleName = items.Where(x => x.Id == 1).FirstOrDefault(v => v.Name);
Offensichtlich kann die Id 1, 2 oder eine andere sein.
Bearbeiten:
Ich empfehle Ihnen List<Customer>
anstelle von Customer[]
So,
var items = new List<Customer>
{
new Customer { Name = "test1", Id = 999 },
new Customer { Name = "test2", Id = 989 }
};
Verwenden Sie einfach LINQ, um das zu erreichen, was Sie tun möchten. Wenn Sie einen bestimmten Wert abrufen möchten, können Sie where
wie folgt verwenden:
public Customer GetCustomerById(IEnumerable<Customer> items,int key)
{
return items.Where(x=>x.id==key)
.Select(x =>x.Name)
.First();
}
dadurch wird der Kunde abgerufen, der mit einer bestimmten ID übereinstimmt.
Möchten Sie nach dem Erstellen der Liste wiederholt nachschlagen? Wenn ja, möchten Sie vielleicht in Betracht ziehen, ein Wörterbuch für die Suche zu erstellen, beispielsweise:
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".
Ich gehe davon aus, dass Sie die Sammlung nicht an erster Stelle erstellen. Wenn Sie die Erstellung der Originalsammlung selbst steuern konnten, könnten Sie ein Wörterbuch verwenden.