c# Entity Framework 选择派生子项

标签 c# entity-framework linq inheritance select

所以我需要选择一个 Task() 对象,它是 Attachments() 对象,还有 Include(),如下所示:

var tmp = cntx.Tasks.Include( at => at.Attachments ).FirstOrDefault(t => t.Id == id ); 

它工作正常,MVC api Controller 可以将它序列化为 json,列出所有 Attachmnet,基本上它工作得很好。

现在我的问题是,我需要在 Task()

中添加 3 个额外的字符串属性(为了更清晰的示例,我只在下面使用 +1 字符串)
 public class TaskView : DataClasses.Task {
    public string BusinessName { get; set; }
}

这些 Prop 不是 Task() 的导航属性,实际上它来自其他几个表。现在我可以将之前的查询与表连接起来,但我不确定如何选择之前完全填充的 Task 对象及其所有导航 Attachment() 对象,并将其转换为TaskView 对象,添加了 BusinessName 字符串。

有什么想法吗?

最佳答案

public class TaskView : DataClasses.Task {
    public string BusinessName { get; set; }
    // Create constructor for Task
    public TaskView(DataClasses.Task task)
    {
       // Copy properties here
    }
}

然后你可以这样做:

var tmp = cntx.Tasks
  .Include(at => at.Attachments)
  .Where(t => t.Id == id)
  .Select(t=> new TaskView(t) { BusinessName=...})
  .FirstOrDefault();

或者您可以在 TaskView 上创建一个属性,用于设置(并可能获取)来自 TaskView 的任务,然后只需在 LINQ 查询中设置它。

或者这样做:

public class TaskView {
    public string BusinessName { get; set; }
    public DataClasses.Task Task { get; set;}
}

然后:

var tmp = cntx.Tasks
  .Include(at => at.Attachments)
  .Where(t => t.Id == id)
  .Select(t=> new TaskView { Task=t,BusinessName=...})
  .FirstOrDefault();

关于c# Entity Framework 选择派生子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34069806/

相关文章:

c# - 如何使用 Linq 返回列值已更改的列表或可枚举行

c# - 如何在对数据库进行外部更改后更新/同步 DbContext

c# - Razor renderpartial 异常 - 预期 '}"

c# - 确定 MSI 的版本而不安装它

c# - 使用linq在查找表中查找记录

C# Entity Framework : Rename table field without losing data, 使用自动迁移

C# 表达式使用 == 或等于运算符和外部参数轻松转换

c# - EF - "Update-Database"导致序列包含多个元素

c# - 使用 Linq 按多种条件排序列表

c# - 无法通过启用的 UseAuthentication 访问 HomeController 路由