2013-06-17 49 views
7

Tôi ngạc nhiên nếu ai đó biết làm thế nào để bày tỏ trong Entity Framework những gì nó sẽ được trong SQL tinh khiết:Entity framework OrderBy "CASE KHI"

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

tôi đã cố gắng sử dụng LINQ động nhưng khi mã này được thực thi:

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

tôi nhận được ngoại lệ: { "Không có tài sản hoặc trường 'Case' tồn tại trong loại 'người'"}

Trả lời

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

Dưới đây là một bản dịch của SQL của bạn để 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, 
      } 

Tôi đã sử dụng cú pháp truy vấn thông thạo vì vậy tôi có thể hiển thị cho bạn những từ khóa let. let cho phép bạn khai báo một biến phạm vi có thể được sử dụng lại trong truy vấn của bạn, điều này rất hữu ích nếu bạn có điều kiện được sử dụng ở nhiều nơi hoặc nếu bạn cần chuỗi nhiều điều kiện.