2009-02-18 34 views
8

Tôi đang gặp khó khăn khi dịch cú pháp sql sang LINQ.LINQ với phép nối trái trên SubQuery chứa số

Tôi có 2 bảng (Danh mục và Danh mục danh mục) tham chiếu lẫn nhau với CategoryID. Tôi cần có danh sách tất cả các CategoryID trong Category Table và Count of CategoryID cho tất cả các trận đấu tương ứng trong bảng CategoryListing. Nếu một CategoryID là không có mặt trong CategoryListing thì CategoryID nên vẫn được trả lại - nhưng với một tần số 0.

Truy vấn sql dưới đây trình bày kết quả dự kiến:

SELECT c.CategoryID, COALESCE(cl.frequency, 0) as frequency 
FROM Category c 
LEFT JOIN (
    SELECT cl.CategoryID, COUNT(cl.CategoryID) as frequency 
    FROM CategoryListing cl 
    GROUP BY cl.CategoryID 
) as cl 
ON c.CategoryID = cl.CategoryID 
WHERE c.GuideID = 1 

Trả lời

13

Không thử nghiệm, nhưng điều này nên làm mẹo:

var q = from c in ctx.Category 
     join clg in 
      (
       from cl in ctx.CategoryListing 
       group cl by cl.CategoryID into g 
       select new { CategoryID = g.Key, Frequency = g.Count()} 
      ) on c.CategoryID equals clg.CategoryID into cclg 
     from v in cclg.DefaultIfEmpty() 
     where c.GuideID==1 
     select new { c.CategoryID, Frequency = v.Frequency ?? 0 }; 
+0

Frans, Cảm ơn bạn đã trả lời nhanh. Điều này làm việc tuyệt vời, ngoại trừ tôi cần một tham gia trái trên clg. –

+0

Tôi không tin rằng có thực sự bất kỳ điều như một trái tham gia trong LINQ ... –

+0

Oh! xấu của tôi, sẽ sửa chữa nó. chỉ một giây –

0

Tôi đã tiếp tục và di chuyển toàn bộ truy vấn đến Quy trình được lưu trữ trên cơ sở dữ liệu. Điều này giải quyết vấn đề bằng cách tránh LINQ ở nơi đầu tiên.

Các vấn đề liên quan