2013-06-17 16 views
7

jestem dziwnego, jeśli ktoś wie, jak wyrazić w Entity Framework, co to będzie w czystym SQL:Entity Framework OrderBy „przypadek, kiedy”

SELECT Name, IsEmployee, IsQualityNetwork 
FROM Person 
ORDER BY CASE WHEN IsQualityNetwork = 1 or IsEmployee = 1 THEN 0 ELSE 1 END, Name 

Próbowałem przy użyciu LINQ dynamiczny, ale gdy ten kod jest wykonywany:

var p = ctx.People 
    .OrderBy("CASE WHEN IsQualityNetwork = 1 or IsEmployee = 1 THEN 0 ELSE 1 END") 
    .OrderBy(e => e.Name); 

otrzymuję wyjątek: { „Nie nieruchomość lub pole«case»istnieje w rodzaju«osoba»”}

Odpowiedz

6
var p = ctx.People.OrderBy(p => (p.IsQualityNetwork == 1 || p.IsEmployee == 1) ? 0 : 1) 
        .ThenBy(p => p.Name); 
1

Oto tłumaczenie Twojej SQL do LINQ.

var query = from p in ctx.People 
      let order = p.IsQualityNetwork || p.IsEmployee ? 0 : 1 
      orderby order, p.Name 
      select new 
      { 
       p.Name, 
       p.IsEmployee, 
       p.IsQualityNetwork, 
      } 

Użyłem biegle składni kwerendy więc mogę pokazać wam słowa kluczowego let. let pozwala zadeklarować zmienną zasięgu, która następnie może być ponownie wykorzystana w zapytaniu, może być bardzo przydatna, jeśli masz warunkowy, który zostanie użyty w wielu miejscach lub jeśli chcesz połączyć wiele warunków warunkowych.