2012-01-23 2 views
0

Вот настройки БД 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:

так, например, я должен получить это список con тентовые участки для 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 из области на TemplateArea.TemplateId = templateId или что-то в этом роде, если это был T-SQL, например. Что-то вроде:

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

ответ

1

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

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

, поэтому ваш запрос возвращает список областей, основанных на соединении с TemplateAreas, где TemplateAreas.TemplateId = 2? – PositiveGuy

+0

@CoffeeAddict Да, набор результатов в этом случае будет содержать только область 1 и 2 – tawman

+0

Да, спасибо, я вижу сейчас. A => a.AreaId, t => t.AreaId действительно является ключом включения ON в основном, поскольку t представляет мой список шаблонов. . Благодаря.! – PositiveGuy

0

Как насчет:

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

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

+0

Я не понимаю, как это TemplateAreas.Where возвращает список Type Area ... нет ссылки на то, как TemplateAreas возвращает совершенно другой тип здесь, который является типом Area..так я не понимаю. – PositiveGuy

0

Попробуйте:

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

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

Смежные вопросы