使用非映射表在Entity Framework中进行连接

时间:2016-09-01 04:40:26

标签: c# sql-server entity-framework

我需要帮助:我需要与3个表进行连接,但其中一个表没有被实体框架映射,因为它只是一个关系表,我需要的连接是这样的:

select * 
from Promocao p
join ProdutoPromocao as pp on pp.PromocaoId = p.IdPromocao
join Produto as pr on pp.ProdutoId = pr.IdProduto
join Boteco as b on pr.botecoId = b.IdBoteco
where b.IdBoteco = 1

但未映射表ProdutoPromocao,如何使用Entity Framework执行此操作?

我想到了类似的东西:

(from pr in db.Promocao
 join p in db.Produto on (pr.Produto.Select(x=>x.IdProduto)) equals p.IdProduto //this line is not working, I would need something like pr.Produto.IdProduto but it does not offer me this alternative
 join b in db.Boteco on p.BotecoId equals b.IdBoteco
 where b.IdBoteco == idBoteco
 select pr
 ).ToList();

有人请帮帮我。

2 个答案:

答案 0 :(得分:1)

您可以尝试如下所示。

(from pr in db.Promocao
 join p in db.Produto on (pr.Produto.Select(x=>x.IdProduto).FirstOrDefault()) equals p.IdProduto 
 join b in db.Boteco on p.BotecoId equals b.IdBoteco
 where b.IdBoteco == idBoteco
 select pr
 ).ToList();

答案 1 :(得分:1)

使用EF时,不需要(在某些情况下,您不能使用手动连接)。拥有导航属性后,您只需要使用它们(就像它们是对象一样),EF将为您生成必要的连接。

您的查询应该是这样的:

from pr in db.Promocao
from p in pr.Produto
let b = p.Boteco
... (the rest)