Linq多重连接



我有一些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已经知道密钥对于实体是唯一的。

分组关键字只允许您访问后面的salesale.Item.Department。它是一个转换,而不是像SQL中那样的运算符。

相关内容

  • 没有找到相关文章

最新更新