Выберите список х через список у - PullRequest
0 голосов
/ 23 января 2012

Вот настройка БД из 3 таблиц:

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

Таким образом, каждый шаблон имеет 3 области (вы видите набор templateIds (например, 2) и связанный набор AreaIds (1 & 2))

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

Example Data:

    AreaId  Name
    1       Top
    2       Middle
    3       Bottom

Я пытаюсь получить список областей на основе списка TemplateAreas, включенного по AreaId в моем списке TemplateAreas:

, поэтому, например, я должен получить этот списокобласти содержимого для 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

, другими словами, получите список областей шаблонов, а затем список связанных областей, связанных с конкретным шаблоном TemplateId.

Я в основном пытаюсь присоединиться к TemplateArea из Area на TemplateArea.TemplateId = templateId или что-то в этом роде, если это был T-SQL, например что-то вроде:

выберите AreaId, Имя из областиприсоединиться к TemplateArea в Area.AreaId = TemplateArea.AreaId, где TemplateArea.TemplateId = templateId

Ответы [ 3 ]

1 голос
/ 23 января 2012

Используя ваш кодовый подход в качестве руководства, вы можете присоединиться к шаблону области:

List<Area> areas = Area.Join(templateAreas, a => a.AreaId, t => t.AreaId, (a, t) => a);
0 голосов
/ 23 января 2012

Попробуйте:

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

Вы можете получить доступ к любому полю области, используя это ..

0 голосов
/ 23 января 2012

Как насчет:

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

Я почти уверен, что это будет работать в Entity Framework, но не уверен в Linq to Sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...