/ / Zapytania LINQ z tabelami wiele do wielu w Entity Data Model - linq, ado.net-entity-data-model

Zapytania LINQ z tabelami wiele do wielu w Entity Data Model - linq, ado.net-entity-data-model

Próbuję użyć LINQ do kwerendy na następujący model danych jednostki tekst alternatywny
w oparciu o ten model db tekst alternatywny

Chciałbym móc pobrać listę produktów opartych na ProductFacets.FacetTypeId.

Zwykle używam złączeń i nie byłoby to problemem, ale nie bardzo rozumiem, jak wysyłać zapytania do tabel wiele do wielu w ramach Entity DataModel.

To jest przykładowe zapytanie SQL:

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

Odpowiedzi:

1 dla odpowiedzi № 1

Zakładając 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 dla odpowiedzi nr 2

W EF (zakładając, że mapowanie odbywa się poprawnie), łączenia rzadko są używane; używane są właściwości nawigacji.

Twój oryginalny SQL zwraca krotkę z powtarzającymi się wpisami w nazwie. Dzięki LINQ jest to często łatwiejsze "kształtować" zapytania do wyników niezwiązanych z krotką.

Następujące powinny być takie same jak SQL, ale zamiast zwracać pary (Name, FacetTypeId) z powtarzającymi się nazwami, zwrócą typ, który ma nazwę i sekwencję 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,
};