如何使用其密钥从IEnumerable集合中获取价值?

Neo*_*Neo 5 c# ienumerable ienumerator

我有IEnumerable集合,如下所示

IEnumerable<Customer> items = new Customer[] 
{ 
     new Customer { Name = "test1", Id = 999 }, 
     new Customer { Name = "test2", Id = 989 } 
};
Run Code Online (Sandbox Code Playgroud)

我想用钥匙获得价值 Id

我试过跟随

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.
      }
}
Run Code Online (Sandbox Code Playgroud)

Ese*_*ser 10

//我将传递propertyName作为Id,并希望获得所有Id属性值

//逐个项目集合.

如果我理解正确的话

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);
}
Run Code Online (Sandbox Code Playgroud)


w.b*_*w.b 9

如果要通过以下方式Customer从集合中检索名称Id:

public string GetCustomerName(IEnumerable<Customer> customers, int id)
{
    return customers.First(c => c.Id == id).Name;
}
Run Code Online (Sandbox Code Playgroud)


NAS*_*SER 6

使用,LINQ您可以通过以下方式获得具有特定ID(键)的所有客户名称(值):

var valuesList = items.Where(x => x.Id == 1).Select(v => v.Name).ToList();
Run Code Online (Sandbox Code Playgroud)

对于单个客户名称,您可以执行以下操作:

var singleName = items.FirstOrDefault(x => x.Id == 1)?.Name;
Run Code Online (Sandbox Code Playgroud)

显然,Id可以是1、2或其他任何值。

编辑:

我建议你List<Customer>代替Customer[]

所以,

var items = new List<Customer> 
{ 
     new Customer { Name = "test1", Id = 999 }, 
     new Customer { Name = "test2", Id = 989 } 
};
Run Code Online (Sandbox Code Playgroud)


Nad*_*ury 5

只需使用LINQ即可实现您想做的事情。如果要检索特定值,可以这样使用where

public Customer GetCustomerById(IEnumerable<Customer> items,int key)
{
    return items.Where(x=>x.id==key)
   .Select(x =>x.Name)
   .First(); 
}
Run Code Online (Sandbox Code Playgroud)

这将检索匹配特定ID的客户。