所以我需要选择一个 Task()
对象,它是 Attachments()
对象,还有 Include()
,如下所示:
var tmp = cntx.Tasks.Include( at => at.Attachments ).FirstOrDefault(t => t.Id == id );
它工作正常,MVC api Controller 可以将它序列化为 json,列出所有 Attachmnet,基本上它工作得很好。
现在我的问题是,我需要在 Task()
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/