C# 使用linq按枚举填充类实例

C# 使用linq按枚举填充类实例,c#,.net,linq,enums,generic-list,C#,.net,Linq,Enums,Generic List,我有一个通用的列表PersonList,其中包含个人信息 class Person { public string name {get ; set;} public string lastName {get ; set;} public decimal income {get ; set;} } 我有一个方法可以返回收入 decimal GetPersonIncome(string name) 我有包含要筛选的名称的枚举: enum Sortedname

我有一个通用的
列表PersonList
,其中包含个人信息

class Person 
{
    public string name  {get ; set;} 
    public string lastName  {get ; set;}
    public decimal income  {get ; set;} 
}
我有一个方法可以返回收入

decimal GetPersonIncome(string name) 
我有包含要筛选的名称的枚举:

enum SortednamesA
{
    george,
    jack,
    etc
}

enum SortednamesB
{
    bill,
    john,
    etc
}
我想基于每个枚举的名称创建
sortedPersonIncome
实例

Class SortedPersonsIncome 
{
    public SortedPerdons(string customListname, 
    decimal sortedPersonIncomeA,            
    decimal sortedPersonIncomeB)  
}
所以它会是这样的:

SortedPersonsIncome sortedA = new SortedPersonsIncome(
"newSortedPerson",
GetPersonIncome(georgeFromEnumA), 
GetPersonIncome(jackFromEnumA))
我希望使用linq或foreach循环以最少的努力来实现这一点。 最好的方法是什么


谢谢

您可以按枚举中的名称筛选
个人列表

var a = PersonList.Where(x=> Enum.GetNames(typeof(SortednamesA)).Contains(x.name))
Enum.GetNames
将为您提供在枚举中定义的名称


Enum.GetNames(typeof(SortednamesA)
将为您提供以下数组
[“george”、“jack”、“etc”]
您可以在枚举中按名称筛选
个人列表

var a = PersonList.Where(x=> Enum.GetNames(typeof(SortednamesA)).Contains(x.name))
Enum.GetNames
将为您提供在枚举中定义的名称


Enum.GetNames(typeof(SortednamesA)
将为您提供以下数组
[“george”、“jack”、“etc”]

我尝试了使用嵌套if的foreach。我也尝试了从linq和where使用foreach,但我对linq是新手,我找不到解决方案。将其添加到问题中,为什么不仅仅是
SortedPersonsIncome SortedDA=new SortedPersonsIncome(“newSortedPerson”),GetPersonInome(SortednamesA.george.ToString()),GetPersonInome(SortednamesA.jack.ToString())
我使用枚举,因为我使用特定的名称,不想输入任何其他名称。我使用嵌套的if尝试foreach。我也尝试从linq和何处使用foreach,但我是linq的新手,我找不到解决方案将其添加到问题中为什么不只是
SortedPersonIncome SortedDA=new SortedPersonIncome(“newSortedPerson”、GetPersonInCode(SortednamesA.george.ToString())、GetPersonInCode(SortednamesA.jack.ToString()))
我使用枚举,因为我使用特定的名称,不希望任何其他名称作为输入。非常好,非常优雅。谢谢。虽然是一个微优化,但这将为枚举的每次迭代冗余调用
Enum.GetNames
。您可以将其作为语句放在LINQ查询之前,以保存开销,非常好,非常优雅。谢谢虽然这是一个微优化,但对于枚举表的每次迭代,都会冗余调用
Enum.GetNames
。您可以将其作为语句放在LINQ查询之前,以节省开销