簡體   English   中英

實體框架中的多個連接並包括所有數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM