Вы всегда можете написать метод, который выполняет вашу логическую проверку, и вызвать его в отдельном предложении 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};