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 № 1Usando 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.