我想在 dotnetcore web api 控制器中使用 linq 方法通过 entityframework 从多个表中获取数据

Posted

技术标签:

【中文标题】我想在 dotnetcore web api 控制器中使用 linq 方法通过 entityframework 从多个表中获取数据【英文标题】:I want to bring data from multiple tables with entityframework using linq method in dotnetcore web api controller 【发布时间】:2021-04-02 06:52:47 【问题描述】:
public class Mission
    
        public int Id  get; set;         
        public string Name  get; set;         
        public long Duration  get; set; // time stored in second        
        public string Aircraft  get; set; 
        public string Syllabus  get; set;         
        public int MissionTypeId  get; set; 
        public int PhaseId  get; set;         
        public MissionType Type  get; set;         
        public  Phase Phase  get; set; 
    

public class Phase
            
        public int PhaseId  get; set; 
        public string PhaseName  get; set; 
        public  ICollection<Mission> Missions  get; set; 

    
public class MissionType
    
        public int MissionTypeId  get; set; 
        public string MissionTypeName  get; set; 
        
        public  ICollection<Mission> Missions  get; set; 


    

// 当我使用 await context.Missions.ToListAsync();在控制器中,它给了我类似这种格式的项目列表。

    "id": 1,
    "name": "ID-1",
    "duration": 3600,
    "aircraft": "PT-6",
    "syllabus": "BASIC CONV",
    "missionTypeId": 1,
    "phaseId": 1,
    "type": null,
    "phase": null

// 我需要这种格式的列表。我可以使用哪种 linq 查询方法从数据库中获取这样的结果

    
        "id": 1,
        "name": "ID-1",
        "duration": 3600,
        "aircraft": "PT-6",
        "syllabus": "BASIC CONV",
        "missionTypeId": 1,
        "phaseId": 1,
        "type": 
            "missionTypeId": 1,
            "missionTypeName": "ID - 1 "
        ,
        "phase": 
            "phaseId": 1,
            "phaseName": "ID"
        
    

【问题讨论】:

这不是问题。请告诉我们您正在尝试做什么,您不能做什么,以及您需要帮助的具体内容。 【参考方案1】:

您需要明确告诉 EF Core 您要加载哪些相关实体。

试试这个:

await context.Missions
    .Include(m => m.Type)
    .Include(m => m.Phase)
    .ToListAsync();

【讨论】:

【参考方案2】:

试试下面的代码:

var mission = (from m in _context.Missions
                join t in _context.MissionTypes on m.MissionTypeId equals t.MissionTypeId
                join p in _context.Phases on m.PhaseId equals p.PhaseId
                select new Mission
                
                    Id = m.Id,
                    Name = m.Name,
                    Duration = m.Duration,
                    Aircraft = m.Aircraft,
                    Syllabus = m.Syllabus,
                    MissionTypeId = m.MissionTypeId,
                    PhaseId = m.PhaseId,
                    Type = m.Type,
                    Phase = m.Phase
                ).FirstOrDefault();

【讨论】:

以上是关于我想在 dotnetcore web api 控制器中使用 linq 方法通过 entityframework 从多个表中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 msbuild 从 dotnetcore web-api 项目中触发“ng build”,但将 angular 项目保存在单独的文件夹中?

Web API 2:如何搜索

使用 Angular 2 调用 Web API 控制器

带有点网核心的自托管进程内 Web API

如何在 dotnet core Web Api 中返回自定义错误消息

从 DotNetCore 迁移到 NodeJS