c# - 如何编写一个 EF 查询来连接三个表并按字段排序?

标签 c# mysql entity-framework

我有以下 3 个表,其结构如下所示。我正在尝试在 3 个表中编写一个 Entity Framework 连接查询 到

Select joblink, usersubmitted, runstatus, submitted_time, changelist 
orderby submitted time

我能够从 2 个表中连接和检索数据,但无法弄清楚 关于如何加入 3 个表,任何人都可以提供有关如何执行此操作的指导吗?

lookahead_run (Table#1) 
+-------------------+--------+----------------+-------------------+----------+
lookahead_run_id(PK)|joblink |  usersubmitted |submitted_time     |runstatus
+-------------------+--------+----------------+-------------------+----------+
15963---------------+link1---+---username1----+2017-03-17 22:28:53--Fail-----


lookahead_run_change_list (Table#2)
+---------------+----------------+-----------------+
changelistid(PK)|lookahead_run_id|change_list_id
+---------------+----------------+-----------------+
38591-----------+15963-----------+34022
38590-----------+15963-----------+34021
38589-----------+15963-----------+34020


change_lists (Table#3)
+-------------+-----------+
change_list_id|changelist
+-------------+-----------+
34022--------  1823900
34021--------  1819483
34020--------  1818572

更新代码;-

namespace Dashboard.Model.ApiModels
{
    public class LookaheadRunInfo
    {
        public string ECJobLink { get; set; }
        public List<String> gerrits { get; set; }
        public string UserSubmitted { get; set; }
        public string SubmittedTime { get; set; }
        public string RunStatus { get; set; }
    }
}

        public IEnumerable<LookaheadRunInfo> GetLookaheadRunInfoSearch(LookaheadRunsFilterCriteria filterCriteria)
        {
            List<LookaheadRunInfo> lookaheadRunsInfo = new List<LookaheadRunInfo>();           
            var lookaheadRunData = bitDB.lookahead_run.OrderBy(x => x.lookahead_run_id).Skip(filterCriteria.PageNumber * filterCriteria.PageSize).Take(filterCriteria.PageSize).ToList();
            foreach (var lookaheadRunRow in lookaheadRunData)
            {
                var lookaheadRunId = lookaheadRunRow.lookahead_run_id;
                 lookaheadRunsInfo = (from lrcl in bitDB.lookahead_run_change_list
                                                 join cl in bitDB.change_lists on lrcl.change_list_id equals cl.change_list_id
                                                 join lr in bitDB.lookahead_run on lrcl.lookahead_run_id equals lr.lookahead_run_id
                                                 where lrcl.lookahead_run_id == lookaheadRunId
                                                 orderby lr.submission_time
                                                 select new LookaheadRunInfo
                                                 {
                                                     lr.ec_job_link,
                                                     cl.change_requests,
                                                     lr.submitted_by,
                                                     lr.submission_time,
                                                     lr.lookahead_run_status,

                                                 }).ToList();
            }
            return lookaheadRunsInfo;
        }

错误:-

Error   1   Cannot initialize type 'Dashboard.Model.ApiModels.LookaheadRunInfo' with a collection initializer because it does not implement 'System.Collections.IEnumerable'

最佳答案

您可以在查询中放置任意数量的连接。如果要从多个实体中选择字段,则需要选择一个新对象。我建议您创建一个 holder 类来包含连接的内容,但我将向您展示如何使用匿名类型来实现:

var lookaheadRunChangeListIds = (from lrcl in bitDB.lookahead_run_change_list
    join cl in bitDB.change_lists on lrcl.change_list_id equals cl.change_list_id
    join lr in bitDB.lookahead_run on lrcl.lookahead_run_id equals lr.lookahead_run_id
    where lrcl.lookahead_run_id == lookaheadRunId
    orderby lr.submitted_time
    select new LookaheadRunInfo { 
        ECJobLink = lr.joblink, 
        UserSubmitted = lr.usersubmitted, 
        RunStatus = lr.runstatus, 
        SubmittedTime = lr.submitted_time, 
        gerrits = cl.changelist 
    }).ToList();

请注意,new { ... } 可以替换为 new NewClass { ... },其中 NewClass 包含所有选定的字段。

上面的编辑:在实例化 LookAheadRun 时命名您的属性,因为名称不同,您应该映射它们。

关于c# - 如何编写一个 EF 查询来连接三个表并按字段排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42868339/

相关文章:

mysql - 打印两个表的结果,没有按日期排序的公共(public)列

.net - 内部连接以获取不在表中的那些

c# - 使用 Entity Framework 枚举到字符串

c# - 在使用 include 语句急切加载时处理 Entity Framework 的缓慢性能?

c# - XamlReader.Parse 在空字符串上引发异常

c# - 实现博客条目链接

c# - 3 维波的法线

javascript - 清理缓存后如何恢复 Blazor WASM "offline-cache"?

mysql - 创建事件以在mysql中保存数据库的方法

没有嵌套查询的 Php 程序,使其成为有用的代码