我上傳了Picasa上的簡化SQL ERD。 我試圖做到這一點,但我設法與超過2個查詢。如何使用常規SQL和Linq-To-Entities檢索包含1-2個查詢的所有記錄?
我需要檢索表d所有記錄與特定E_ID表Ë和具體TYPEID表的一個
修訂:我還需要從所有記錄B映射到類型Id將被取回,即使它們不是全部都映射在表中C(某種左右的JOIN)
我需要做的是最多2個查詢,然後將其轉換爲LINQ到entites的聲明 如果它可以用1個查詢做我喜歡用1個查詢
謝謝
我上傳了Picasa上的簡化SQL ERD。 我試圖做到這一點,但我設法與超過2個查詢。如何使用常規SQL和Linq-To-Entities檢索包含1-2個查詢的所有記錄?
我需要檢索表d所有記錄與特定E_ID表Ë和具體TYPEID表的一個
修訂:我還需要從所有記錄B映射到類型Id將被取回,即使它們不是全部都映射在表中C(某種左右的JOIN)
我需要做的是最多2個查詢,然後將其轉換爲LINQ到entites的聲明 如果它可以用1個查詢做我喜歡用1個查詢
謝謝
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;
我忘了提到這種情況。我更新了我的帖子。如果你可以請更新你的答案。謝謝 – theateist 2011-05-07 16:15:31
@theateist:我編輯了我的答案。您必須使用兩個查詢,因爲您需要兩個不同的結果集。 – 2011-05-07 17:28:14
爲什麼以下任何理由不適合你?
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>
這聽起來像你只是想要一堆內在的joi ns將所有表格放在一起,然後在Typeid和E_id上過濾 - 這是正確的嗎? – 2011-05-07 15:53:00