2011-05-07 21 views
0

我上傳了Picasa上的簡化SQL ERD。 我試圖做到這一點,但我設法與超過2個查詢。如何使用常規SQL和Linq-To-Entities檢索包含1-2個查詢的所有記錄?

我需要檢索表d所有記錄與特定E_IDË和具體TYPEID表一個

修訂:我還需要從所有記錄B映射到類型Id將被取回,即使它們不是全部都映射在表中C(某種左右的JOIN)

我需要做的是最多2個查詢,然後將其轉換爲LINQ到entites的聲明 如果它可以用1個查詢做我喜歡用1個查詢

謝謝

+0

這聽起來像你只是想要一堆內在的joi ns將所有表格放在一起,然後在Typeid和E_id上過濾 - 這是正確的嗎? – 2011-05-07 15:53:00

回答

0

SQL查詢:

SELECT D.* 
FROM D 
INNER JOIN C ON C.Id = D.C_Id 
INNER JOIN B ON B.Id = C.B_Id 
INNER JOIN A ON A.Id = B.A_Id 
WHERE D.E_Id = @eId AND A.TypeId = @typeId 

SELECT B.* 
FROM B 
INNER JOIN A ON A.Id = B.A_Id 
WHERE A.TypeId = @typeId 

直接的LINQ(如果導航屬性不存在):

var query = from d in context.D 
      join c in context.C on c.Id equals d.cId 
      join b in context.B on b.Id equals c.bId 
      join a in context.A on a.Id equals b.aId 
      where d.eId == eId && a.TypeId == typeId 
      select d; 

var query2 = from b in context.B 
      join a in context.A on a.Id equals b.aId 
      where a.TypeId == typeId 
      select b; 

的LINQ如果導航屬性設置正確:

var query = from d in context.D 
      where d.E.Id == eId && 
        d.C.B.A.TypeId == typeId 
      select d; 

var query2 = from b in context.B 
      where b.A.TypeId == typeId 
      select b; 
+0

我忘了提到這種情況。我更新了我的帖子。如果你可以請更新你的答案。謝謝 – theateist 2011-05-07 16:15:31

+0

@theateist:我編輯了我的答案。您必須使用兩個查詢,因爲您需要兩個不同的結果集。 – 2011-05-07 17:28:14

0

爲什麼以下任何理由不適合你?

SELECT D.* 
FROM D 
INNER JOIN C 
ON C.Id = D.C_Id 
INNER JOIN B 
ON B.Id = C.B_Id 
INNER JOIN A 
ON A.Id = B.A_Id 
WHERE D.E_id = <The E_Id> AND A.Typeid = <The Typeid> 
+0

我忘了提到這種情況。我更新了我的帖子。如果你可以請更新你的答案。謝謝 – theateist 2011-05-07 16:15:52

+0

@theateist - 你的結果是否需要來自更多表格的字段而不僅僅是D? – 2011-05-07 16:19:00

+0

是的,我願意。對不起,如果我沒有正確寫下這個問題。我很着急。 – theateist 2011-05-07 16:40:18

相關問題