1

我有 3 张桌子:

学位(Id int(PK),学位名称字符串)

1   Bachelor
2   Master
3   PhD

Track(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 字符串)

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。

4

2 回答 2

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();
于 2013-01-31T08:49:45.107 回答
1

您应该将曲目加入群组:

var groupList = entity.Track.Where(s=>s.DegreeID == 1).Join(entity.Group, t=>t.Id, g=>g.TrackId, (t,g)=>g).ToArray();
于 2013-01-31T05:00:37.267 回答