2013-11-27 15 views
0

我遇到了麻煩提出正確的linq sql查詢下面的問題。無法構造適當的linq-to-sql查詢

我有3個表:

A) 「產品」 具有以下的列:

  • 產品編號:唯一標識符
  • 的pageID:對於產品
  • companyID頁面的標識符:擁有該產品的公司的標識

B)具有以下公司的「公司」 lumns:

  • companyID:公司的唯一標識符
  • 的pageID:頁面的標識爲公司

C) 「頁面」 有以下的列:

  • 的pageID :頁面的唯一標識
  • parentID:父頁的標識(基本上,一家公司可以擁有另一家公司,這是它的維護地點NED) SQL diagram

一件事是,在產品companyID是在公司表等於的pageID

這主要是知道的網址擁有產品的公司(僅供參考,這是我必須使用的模式,所以我不能很好地修改它)。

我想要實現的是: 用戶將有一個表單,並將在文本框中輸入公司的名稱,我需要能夠檢索該公司擁有的產品列表。

我能做到這一點的時候有沒有母公司:

from p in ctx.Products 
join c in ctx.Companies on p.pageID equals c.companyID 
where ... 
select ... 

然而,如果一家公司有一個父(頁表中定義),我不知道如何去那?那是另一個聯合聲明?

回答

0

要做到這一點,最好的方法是編寫一個視圖(或存儲過程)並將其導入到您的模型中,而不是編寫一個linq查詢來執行此操作。 sql查詢(很可能使用公用表表達式[或CTE])在性能方面會更好。嘗試使用CTE編寫視圖(或存儲過程)。這將允許您遞歸查詢數據庫。

編輯:這是一個開始(我不是一個專用的SQL專家,所以這可能會或可能不會在第一次運行工作)

WITH CTECompanyProducts(pageID 
         , parentID 
         , pageName 
         , companyID 
         , companyFieldA 
         , companyFieldB 
         , companyFieldC 
         , productFieldA 
         , productFieldB 
         , productFieldC 
         , level) 
AS 
(
    SELECT p.pageID 
     , p.parentID 
     , p.pageName 
     , c.companyID 
     , c.fieldA 
     , c.fieldB 
     , c.fieldC 
     , pr.field1 
     , pr.field2 
     , pr.field3 
     , 0 AS Level 
    FROM Page p 
    JOIN Company c 
     ON p.pageID = c.pageID 
    JOIN Product pr 
     ON pr.companyID = c.companyID 
    WHERE p.parentID IS NULL 

    UNION ALL 

    SELECT p.pageID 
     , p.parentID 
     , p.pageName 
     , c.companyID 
     , c.fieldA 
     , c.fieldB 
     , c.fieldC 
     , pr.field1 
     , pr.field2 
     , pr.field3 
     , Level + 1 
    FROM Page p 
    JOIN Company c 
     ON p.pageID = c.pageID 
    JOIN Product pr 
     ON pr.companyID = c.companyID 
    JOIN Page pa 
     ON p.pageID = pa.parentID 
) 

SELECT * 
FROM CTECompanyProducts 
Where companyID = [your company ID]; 
+0

嘿肯尼,快速回復謝謝!不幸的是,我甚至不知道如何編寫SQL查詢來爲這個需求創建視圖。有什麼幫助嗎?謝謝 – mustang888

+0

喲,我做了一個編輯..我不知道它是否會起初工作,但它的開始。您可以搜索遞歸CTE以獲取更多幫助 –