EF Core从子表返回特定列

时间:2018-06-19 18:14:24

标签: c# linq entity-framework-core

我不想使用.include来获取整个子表。我只需要选择列即可。

public class ProjectTypeDTO {
    public string Type { get; set; }
}

public class CourseDTO {
    public string CourseCode { get; set; }
    public string CourseTitle { get; set; }
}

public class ProjectDTO {
    public int Id { get; set; }
    public ProjectTypeDTO ProjectType { get; set; }
    public CourseDTO Course { get; set; }
    public string StartTerm { get; set; }
    public DateTime SignOff { get; set; }
    public DateTime StartDateTime { get; set; }
}

[HttpGet("getallprojects")]
public IActionResult GetAllProjects()
{
    var projects = _context.Projects
          .Select(p => new ProjectDTO
           {
               Id = p.Id,
               ProjectType = { Type = p.ProjectType.Type },
               Course = { CourseCode = p.Course.CourseCode, CourseTitle = p.Course.CourseTitle },
               StartTerm = p.StartTerm,
               SignOff = p.SignOff,
               StartDateTime = p.StartDateTime,
               }).ToList();

    return Ok(projects);
}

这将引发“ NotImplementedException:方法或操作未实现。”错误。

我已经将其测试为匿名函数,并且可以正常工作。

var projects = _context.Projects
    .Select(p => new
    {
        p.Id,
        p.ProjectType.Type,
        p.SignOff,
        p.StartDateTime,
        p.Course.CourseCode,
        p.Course.CourseTitle,
        p.StartTerm
     }).ToList();

匿名类型不适用于我的应用程序,因为我需要能够对此数据进行更改,然后才能将其返回。

根据我在这里看到的其他示例以及其他站点,这看起来是正确的。可能是错误吗?

1 个答案:

答案 0 :(得分:2)

我以前没有看过子对象的语法。例如:

ProjectType = { Type = p.ProjectType.Type }

我认为应该是:

ProjectType = new ProjectTypeDTO{ Type = p.ProjectType.Type }