[英]Multiple join in Entity Framework and include all data
我想在Entity Framework中編寫一個具有多個連接的查詢。 唯一的問題是表與使用它們的主鍵/外鍵(它的Umbraco數據庫)無關,因此我不能使用.Include和Navigation屬性。
基本上我想運行的查詢是這樣的:
select t.*, n.* from cmsContentType t
inner join cmsContentTypeAllowedContentType a on t.nodeId = a.Id
inner join vicinity.DocumentTypeExtendedProperty x on x.UmbracoDocumentTypeId = t.pk
inner join umbracoNode n on n.id = t.nodeId
我有兩個EF實體映射到cmsContentType和umbracoNode,因此我希望它們被填充,好像我正在運行查詢一樣
var q = from p in cmsContentType.Include("umbracoNode")
如何才能做到這一點
以上答案都是正確的。
但是,為了簡化事情 - 為什么不創建一個視圖?
視圖可以執行您想要的連接,然后您的LINQ查詢變得像餅一樣簡單:
var q = from x in objectContext.myFunkySpecialView
select x;
嘗試以下方法:
var q = from t in objectContext.cmsContentType
from a in objectContext.cmsContentTypeAllowedContentType
from x in objectContext.DocumentTypeExtendedProperty
from n in objectContext.umbracoNode
where t.nodeId == a.Id && x.UmbracoDocumentTypeId == t.pk && n.id == t.nodeId
select new {
t = t,
n = n
};
希望這可以幫助。
Include將導航屬性轉換為外連接。 在您的SQL示例中,您實際上使用的內部聯接很容易轉換為LINQ。 Devart發布的LINQ查詢絕對正確,但是使用join關鍵字而不是嵌套from語句IMHO生成的查詢看起來幾乎與原始SQL查詢相同。
var q = from t in objectContext.cmsContentType
join a in objectContext.cmsContentTypeAllowedContentType on t.nodeId equals a.Id
join x in objectContext.DocumentTypeExtendedProperty on t.pk equals x.UmbracoDocumentTypeId
join n in objectContext.umbracoNode on t.nodeId equals n.id
select new {
t = t,
n = n
};
試試這個肯定會奏效
var Salary = from SalaryTable in testEntity.Salary
from MonthTable in testEntity.Month
where SalaryTable.Month == MonthTable.Month1
select SalaryTable,
還要記住,你不能返回一個匿名類型,即來自單個列表或var中的兩個表的數據,因為你必須創建一個具有屬性的類,你需要返回並迭代它並將新創建的類作為列表返回獲得所需的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.