1

私は3つのテーブルを持っています:

Degree(Id int(PK), DegreeName string)

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

Group(Id int(PK), TrackId int(FK), GroupName 文字列)

1   4   Group1
2   3   Group2
3   1   Group3
4   3   Group4
5   2   Group5

Degree と Track の間には 1 対多の関係があり、Track と Group の間には別の 1 対多の関係があります。

私はこのクラスを持っています:

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();

UPDATEラムダ式を使用したい場合は、これを試してください:

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 に答える