Как выполнить код как часть запроса LINQ - PullRequest
1 голос
/ 01 сентября 2010

У меня есть запрос, который выглядит так:

    var results = from person
                  where <here I need to do something like if person is of type 
Employee, call person.GetSalary() > 100000 but if the person is of type Contractor, I need to execute 
several lines of code before doing a person.GetSalary() > 100000 
                  select new {person.Name}

Сложность заключается в построении предложения where. Может ли кто-нибудь помочь мне завершить этот запрос?

1 Ответ

3 голосов
/ 01 сентября 2010

Вы всегда можете написать метод, который выполняет вашу логическую проверку, и вызвать его в отдельном предложении where.Для этого с LINQ-to-Entities необходимо сначала материализовать результаты, используя AsEnumerable():

bool CheckEmployeeOrContractorSalary( Person p, decimal salaryLevel )
{
   // put your employee and contractor logic here...
   if( p is Employee ) {
       return p.GetSalary() > salaryLevel; }
   else if( p is Contractor ) {
       // ... your complex logic...
       return p.GetSalary() > salaryLevel; }
   else
       // ??? 
       return false;
}

Теперь вы можете написать:

var results = from person in (
                  (from p in person select new { p.Name } ).AsEnumerable())
              where CheckEmployeeOrContractorSalary( person, 100000 )
              select new {person.Name};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...