我有一些sql表,我需要从当前返回单列列表的查询中查询信息:
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列。我已尝试添加字段
Description = dmi.Description
但它不起作用。如何将数据从第三个表中获取到使用此语句创建的新select中?非常感谢您的帮助。
首先,您使用的实体框架完全错误。Linq不是SQL。
您不应该使用join
。相反,您应该使用Associations。
因此,您的查询应该看起来像。。。
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进行分组,而应该按照实际的"行"进行分组,或者用Object的说法(这是您应该在EF中使用的,因为ORM的存在理由是将DB转换为Object),就是您应该按照"实体"而不是"实体的键"进行分组。
EF已经知道密钥对于实体是唯一的。
分组关键字只允许您访问后面的sale
和sale.Item.Department
。它是一个转换,而不是像SQL中那样的运算符。