【问题标题】:How to select from 3 tables in a series using Linq?如何使用 Linq 从系列中的 3 个表中进行选择?
【发布时间】:2013-01-15 00:21:32
【问题描述】:

我有 3 张桌子:

Degree(Id int(PK), DegreeName 字符串)

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

如何获取这些学习轨道属于学士学位的所有组的Group List,应该是Group2,Group4和Group5。

【问题讨论】:

    标签: c# .net sql linq entity-framework


    【解决方案1】:

    可能最好的办法是加入这些表。您可以在数据库中创建视图,也可以使用 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();
    

    【讨论】:

    • 非常感谢。它完美地工作。您对如何将此连接转换为使用 lambda 表达式有任何想法吗,就像我在 TrackList 中所做的那样?只是为了保持编码统一。
    • @Dr.MAF 我更新了我的答案,我没有验证代码,但它应该可以工作。
    【解决方案2】:

    你应该加入小组的轨道:

    var groupList = entity.Track.Where(s=>s.DegreeID == 1).Join(entity.Group, t=>t.Id, g=>g.TrackId, (t,g)=>g).ToArray();
    

    【讨论】:

    • 您的答案在使用“var”类型的情况下有效。我编辑了我的问题。请再次检查以帮助我克服我的问题。它给了我这个错误:无法将类型'Group[]'隐式转换为'System.Collections.Generic.List'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    相关资源
    最近更新 更多