2016-01-02 3 views
1

Ive получил родовую List<Person> PersonList, который содержит ЛицоPopulate экземпляр класса с помощью перечисления с помощью LINQ

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 
} 

Я хочу создать SortedPersonsIncome экземпляров на основе имен каждого перечисления.

Class SortedPersonsIncome 
{ 
    public SortedPerdons(string customListname, 
    decimal sortedPersonIncomeA,    
    decimal sortedPersonIncomeB) 
} 

Так он будет идти, как это:

SortedPersonsIncome sortedA = new SortedPersonsIncome(
"newSortedPerson", 
GetPersonIncome(georgeFromEnumA), 
GetPersonIncome(jackFromEnumA)) 

Я хочу сделать это с наименьшими усилиями с помощью LINQ или цикл по каждому элементу. Каков наилучший способ сделать это?

Спасибо!

+0

Я пытался Еогеасп с вложенным if. – Uninvited

+0

Также я пытался Еогеасп от LINQ и где, но я новичок в LINQ и я не смог найти решение – Uninvited

+1

Добавьте его к вопросу – dotctor

ответ

0

Вы можете фильтровать PersonList по именам в перечислении

var a = PersonList.Where(x=> Enum.GetNames(typeof(SortednamesA)).Contains(x.name)) 

Enum.GetNames даст вам имена, определенные в перечислении, например

Enum.GetNames(typeof(SortednamesA) даст вам следующий массив ["george", "jack", "etc"]

+0

Очень красивый и элегантный. Спасибо. – Uninvited

+1

Несмотря на микро-оптимизацию, это будет избыточно вызывать 'Enum.GetNames' для каждой итерации перечислимого. Вы можете указать его как оператор перед запросом LINQ для сохранения накладных расходов –