/ / Selecione a lista de x através da lista de y - linq, linq - to - sql

Selecione a lista de x através da lista de y - linq, linq - to - sql

Aqui está a configuração do banco de dados de 3 tabelas:

Template
-----------
TemplateId (Pk Identity)
Name

Example Data:

TemplateId  Name
1           Homepage
2           Generic Landing Page


TemplateArea (Bridge table to keep track of each template type"s list of areas)
----------------
TemplateAreaId (Pk Identity)
TemplateId (Fk)
AreaId (Fk)

Example Data:

TemplateAreaId   TemplateId   AreaId
1                1            1
2                1            2
3                1            3
4                2            1
5                2            2

Assim, cada modelo tem três áreas (você está vendo um conjunto de templateIds (por exemplo, 2) e um conjunto relacionado de AreaIds (1 e 2))

Area
-----
AreaId (Pk Name)
Name

Example Data:

AreaId  Name
1       Top
2       Middle
3       Bottom

Eu estou tentando obter uma lista de áreas com base em uma lista de TemplateAreas digitada fora de AreaId na minha lista de TemplateAreas:

Por exemplo, eu deveria obter essa lista de áreas de conteúdo para um TemplateId 2:

AreaId  Name
1       Top
2       Middle


int templateId = 2;

List<TemplateArea> templateAreas = TemplateAreas.Where(ta => ta.TemplateId == templateId).ToList();

List<Area> areas = Areas.Where()); // this is where I"m stuck, how to get the list of areas (1 & 2) relatd to templateId 2

Em outras palavras, obtenha uma lista de áreas de modelo e obtenha uma lista de áreas relacionadas excluídas do TemplateId específico.

Eu estou basicamente tentando entrar para TemplateArea da área em TemplateArea.TemplateId = templateId ou algo parecido se isso fosse T-SQL, por exemplo, algo como:

selecione AreaId, Nome da área, junte TemplateArea em Area.AreaId = TemplateArea.AreaId em que TemplateArea.TemplateId = templateId

Respostas:

1 para resposta № 1

Usando sua abordagem de código como um guia, você pode ingressar no templateAreas:

List<Area> areas = Area.Join(templateAreas, a => a.AreaId, t => t.AreaId, (a, t) => a);

0 para resposta № 2

Tente isto:

List<Area> areas = Areas.Where(ta => ta.TemplateId == templateId).Select(ta => ta.Areas).ToList();

você pode acessar qualquer um dos campos da área usando isto ..


0 para resposta № 3

E se:

List<Area> areas = TemplateAreas.Where(ta => ta.TemplateId == templateId).Select(ta => ta.Areas).Distinct().ToList();

Tenho certeza de que isso funcionaria no Entity Framework, mas não tenho certeza em Linq to Sql.