通过y列表选择x列表

时间:2012-01-23 04:03:21

标签: linq linq-to-sql

这是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.TemplateId = templateId上的Area或类似的东西加入TemplateArea,如果这是T-SQL,例如类似的东西:

选择AreaId,区域名称加入AreaAreaId上的TemplateArea = TemplateArea.AreaId,其中TemplateArea.TemplateId = templateId

3 个答案:

答案 0 :(得分:1)

使用您的代码方法作为指南,您可以加入templateAreas:

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

答案 1 :(得分:0)

怎么样:

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

我很确定这可以在Entity Framework中使用,只是不确定Linq to Sql。

答案 2 :(得分:0)

试试这个:

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

您可以使用此功能访问任何区域字段。