/ / LINQ consulta com tabelas many-to-many em Entity Data Model - linq, ado.net-entity-data-model

Consultas LINQ com tabelas many-to-many no Modelo de Dados de Entidade - linq, ado.net-entity-data-model

Eu estou tentando usar o LINQ para consultar o seguinte modelo de dados de entidade texto alternativo
com base neste modelo de db texto alternativo

Eu gostaria de ser capaz de puxar uma lista de produtos com base em ProductFacets.FacetTypeId.

Normalmente, eu usaria joins e isso não seria um problema, mas eu não entendo como consultar tabelas many-to-many no Entity DataModel.

Este é um exemplo de consulta sql:

select p.Name, pf.FacetTypeId from Products p
inner join ProductFacets pf on p.ProductId = pf.ProductId
where pf.FacetTypeId in(8, 12)

Respostas:

1 para resposta № 1

Presumindo a EF 4:

var facetIds = new [] { 8, 12 };
var q = from p in Context.Products
where p.FacetTypes.Any(f => facetIds.Contains(f.FacetTypeId))
select p;

1 para resposta № 2

Na EF (supondo que o mapeamento seja feito corretamente), as junções raramente são usadas; propriedades de navegação são usadas em vez disso.

Seu SQL original retorna uma tupla com entradas de Nome repetidas. Com o LINQ, muitas vezes é mais fácil para "moldar" as consultas em resultados não-tuplos.

O seguinte deve ser o mesmo que o SQL, apenas em vez de retornar pares (Name, FacetTypeId) com nomes repetidos, ele retornará um tipo que tem um nome e uma seqüência de FacetTypeIds:

var facetIds = new [] { 8, 12 };
var result = from p in db.Products
select new
{
p.Name,
FacetTypeIds = from pf in p.FacetTypes
where pf.FacetTypeId == 8 || pf.FacetTypeId == 12
select pf.FacetTypeId,
};