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

问题描述 投票:5回答:5

我有下面的IEnumerable集合

IEnumerable<Customer> items = new Customer[] 
{ 
     new Customer { Name = "test1", Id = 999 }, 
     new Customer { Name = "test2", Id = 989 } 
};

我想使用键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.
      }
}
c# ienumerable ienumerator
5个回答
9
投票

//我将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);
}

9
投票

如果要通过集合的Customer检索集合中的Id名称:

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

6
投票

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

var valuesList = items.Where(x => x.Id == 1).Select(v => v.Name).ToList();

对于单个客户名称,您可以这样做:

var singleName = items.FirstOrDefault(x => x.Id == 1)?.Name;

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

编辑:

我建议您使用List<Customer>而不是Customer[]

所以,

var items = new List<Customer> 
{ 
     new Customer { Name = "test1", Id = 999 }, 
     new Customer { Name = "test2", Id = 989 } 
};

5
投票

只需使用LINQ即可完成您想做的事情。如果要检索特定值,可以使用where,如下所示:

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

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


0
投票

创建列表后,您是否要重复查找内容?如果是这样,您可能要考虑创建字典来进行查找,例如:

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".

我假设您不是一开始就创建集合-如果您可以控制创建原始集合,则可以首先使用字典。

© www.soinside.com 2019 - 2024. All rights reserved.