webentwicklung-frage-antwort-db.com.de

Wie erhält man einen Wert aus der IEnumerable-Sammlung mithilfe seines Schlüssels?

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.
      }
}
5
Neo

// 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);
}
9
Eser

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;
}
7
w.b

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 } 
};
4
NASSER

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. 

3
Nadeem Khoury

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.

0
Matthew Watson