这是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
答案 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();
您可以使用此功能访问任何区域字段。