2009-12-11 3 views
1

Как проверить несколько случаев в Linq (классифицировать "Переплата", "под платный", "средней зарплаты")C# Sql для Linq проверки нескольких случаев

Sql

select id,name,salary, 
    case when salary <=1500 then 'under paid' 
     when salary >=3500 then 'over paid' 
     else 'medium pay' end as status 
from Person 

Linq

var q = 
      context.Persons. 
      Select(c => 
      new { 
       EmployeeID = c.Id, 
       EmployeeName = c.name, 
       EmployeeSalary = c.salary, 
       Status = c.salary > 1000 ? "under paid" : "overpaid" 
       } 
      ); 

Использование тройной оператор я могу проверить один или случай s.otherwise я должен использовать if..sse if.

ответ

3
Status = c.salary < 1000 ? "under paid" : 
     c.salary < 2000 ? "medium paid" : 
     c.salary < 3000 ? "not bad paid" : 
     "overpaid"; 

выше по существу означает:

Если зарплата под 1к затем вернуться «под платный «если зарплата ниже 2 тыс., то возврат« средний платеж », если зарплата ниже 3 тыс. и т. д.

Вы можете складывать тернарный оператор это так. Первый, который оценивает значение true, будет возвращен, а остальные игнорируются.

Или просто позвоните по методу friggen.

new { Status = GetPaymentStatus(c.salary) } 

Вы можете методы вызова из внутри запроса Linq.

+0

@ Вы меня избиваете. +1 для создания метода обработки –

1

Я бы просто написал метод и позвонил, что из области выбора.

var q = context.Persons.Select(c => GetStatus(c.salary)); 
Смежные вопросы