2016-07-27 34 views
0

我有我需要從返回單個列列表我目前的查詢查詢信息的一些SQL表是:LINQ的多個加盟

from f in FactSales 
where f.DateKey == 20130921 
where f.CompanyID <= 1 
join item in DimMenuItems 
on f.MenuItemKey equals item.MenuItemKey 
join dmi in DimMenuItemDepts 
on item.MenuItemDeptKey equals dmi.MenuItemDeptKey 
group f by dmi.MenuItemDeptKey into c 
select new { 
Amount = c.Sum(l=>l.Amount) 
} 

這由第三個表正確返回我想要的數據,並將其組我加入,但我無法從dmi表中獲取「描述」列。我試圖添加該字段

Description = dmi.Description 

但它不工作。我怎樣才能從第三個表中獲取數據到我用這個語句創建的新選擇中?非常感謝您的幫助。

+1

您還需要按描述進行分組,以便將其添加到您的選擇中 –

回答

1

首先,您正在使用實體框架完全錯誤。 Linq不是SQL。

您不應該使用join。相反,你應該使用關聯。

所以取而代之,您的查詢應該像...

from sale in FactSales 
where sale.DateKey == 20130921 
where sale.CompanyID <= 1 
group sale by sale.Item.Department into c 
select new 
{ 
    Amount = c.Sum(l => l.Amount) 
    Department = c.Key 
} 

遵循協會,你會自動加入隱。

你不應該被「表」的id,而是實際的「row」,或對象的說法(這是你應該在EF中使用的,因爲一個ORM存在的原因是將數據庫轉換爲對象)是否應該由「實體」而不是「實體的密鑰」進行分組。

EF已經知道密鑰對實體是唯一的。

分組關鍵字只允許您在其後訪問salesale.Item.Department。它是一種轉換,而不是SQL中的操作符。

+0

至少根據智能感知,無法將menuitemkey直接鏈接到部門表。這些協會有沒有可能創建?我創建了基於預先存在的數據庫的實體,而不是在創建數據模型時使用設計器。 – Nate58

+1

這個協會很可能不是我們創建的。這些關聯通常由DbFirst edmx嚮導根據外鍵自動生成。如果他們錯過了它,因爲你的數據庫不使用外鍵,這通常是一件非常糟糕的事情。 – Aron

+0

我無法控制如何創建數據庫的模型,這個數據庫是爲olap多維數據集提供數據的倉庫。這些關聯是否可以手動創建?我只有一些非常重要的東西,否則我不需要它們太多 – Nate58