我有3张桌子:
Degree(Id int(PK),DegreeName string)
1 Bachelor
2 Master
3 PhD
跟踪(Id int(PK),DegreeId int(FK),TrackName字符串)
1 2 Engineer
2 1 Technician
3 1 Assistant
4 2 Physicist
5 3 Doctor
组(Id int(PK),TrackId int(FK),GroupName string)
1 4 Group1
2 3 Group2
3 1 Group3
4 3 Group4
5 2 Group5
在Degree和Track之间存在一对多的关系,Track和Group之间存在一对多的关系。
我有这堂课:
Public class DegreeDetails
{
public List<Track> TrackList { get; set; }
public List<Group> GroupsList { get; set; }
}
要获得这些属于学士学位的所有曲目,这是技术员和助手,我使用此代码:
在控制器中我使用此代码:
DegreeDetails MyView = new DegreeDetails();
MyView.TrackList = entity.Track.Where(s => s.DegreeID == 1).ToList();
如何获得所有小组的组列表这些学习课程属于学士学位,应该是Group2,Group4和Group5。
答案 0 :(得分:3)
最好的办法是加入这些表格。您可以在数据库中创建视图,也可以使用Linq连接表。
这应该有效:
MyView.GroupList = (from d in entity.Degree
join t in entity.Track on d.Id equals t.DegreeId
join g in entity.Group on t.Id equals g.TrackId
where d.Id == 1
select g).Distinct().ToList();
更新如果您想使用lambda exp,请尝试:
MyView.GroupList = entity.Degree.Where(d => d.Id == 1)
.Join(entity.Track, d => d.Id, t=> t.DegreeId, (d, t) => t)
.Join(entity.Group, t => t.Id, g => g.TrackId, (t, g) => g)
.Distinct().ToList();
答案 1 :(得分:1)
您应该将曲目加入群组:
var groupList = entity.Track.Where(s=>s.DegreeID == 1).Join(entity.Group, t=>t.Id, g=>g.TrackId, (t,g)=>g).ToArray();