我正在使用EF Code First。现在,我很难弄清楚如何编写LINQ以将数据检索到我的Controller中的模型中,以便在视图中显示它们。基本上,我正在接收HolterTest数据的提要,我正在尝试为执行一系列特定任务的人员创建一个工作清单来处理HolterTest,允许他们在任务完成时标记任务,并提供其中的状态过程中的各个测试基本的Task类是这样的,它们可以添加或改变过程中的步骤,displayOrder是完成任务的顺序。 WorkTask是任务的特定实例,允许我们标记完成任务的人员以及何时完成任务。 WorkItem是一种复杂类型,包括HolterTest,WorkTasks列表和状态信息,包括WorkTasks何时全部完成。
模型类:
public class HolterTest
{
public Int32 HolterTestID { get; set; }
public string PatientNumber { get; set; }
public string LastName { get; set; }
public DateTime RecordingStartDateTime { get; set; }
public System.Nullable<DateTime> AppointmentDateTime { get; set; }
}
public class Task
{
public Int32 TaskID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public Int32 DisplayOrder { get; set; }
public bool IsActive { get; set; }
}
public class WorkTask
{
public Int32 WorkTaskID { get; set; }
public Task Task { get; set; }
public bool IsCompleted { get; set; }
public System.Nullable<DateTime> CompletedDateTime { get; set; }
public string CompletedBy { get; set; }
}
public class WorkItem
{
public Int32 WorkItemID { get; set; }
public HolterTest HolterTest { get; set; }
public string Status { get; set; }
public List<WorkTask> WorkTasks { get; set; }
public bool IsStarted { get; set; }
public bool IsCompleted { get; set; }
public System.Nullable<DateTime> CompletedDateTime { get; set; }
}
目前我有一个业务逻辑功能,它接受HolterTests列表,找到没有WorkItem的那个,并创建WorkItems,根据当前活动的Tasks列表关联HolterTests,包括WorkTasks。 / p>
我的问题是如何编写LINQ以获取WorkItemController的所有WorkItems(及其子项),以便我可以在PatientNumber中显示要在View(WorkItems,其中IsCompleted = false)中执行的工作,并使其成为可能可以更新特定WorkItem的WorkTasks。
答案 0 :(得分:1)
Linq向实体解释 http://msdn.microsoft.com/en-us/library/bb399367.aspx
但从这里开始可能更适合:EF主站点http://msdn.microsoft.com/en-us/data/ee712907
如果你真的想直接潜入这个视频和示例代码。 http://msdn.microsoft.com/en-us/data/jj193542 然后看这个http://msdn.microsoft.com/en-us/data/jj573936
基本上基于POCO,您可以阅读每个POCO并以此方式获取数据。 但是,如果POCOS具有定义的导航属性和外键,则EF会进行大量繁重的工作。值得重新审视POCO定义和Code-First模式。
答案 1 :(得分:1)
您想使用它的导航属性访问相关内容。请注意,在您的示例中,您尚未将导航属性设置为虚拟。您应该像这样更新您的模型:
public class WorkItem
{
public Int32 WorkItemID { get; set; }
public virtual HolterTest HolterTest { get; set; }
public string Status { get; set; }
public virtual List<WorkTask> WorkTasks { get; set; }
public bool IsStarted { get; set; }
public bool IsCompleted { get; set; }
public System.Nullable<DateTime> CompletedDateTime { get; set; }
}
按患者编号访问工作项的简单功能是:
IEnumerable<WorkItem> GetWorkIncompleteWorkItemsByPatient(string patientNumber)
{
var db = new YourContext();
return db.WorkItems.Where(wi => wi.IsCompleted == false && wi.HolterTest.PatientNumber == patientNumber);
}
然后,要处理相关任务,您可以通过任务访问它,在此示例中,如果您知道任务ID:
var workTask = YourWorkItem.WorkTasks.FirstOrDefault(wt => wt.WorkTaskID == worktaskId);
您可以查看工作项中的所有任务,如下所示:
foreach (var workTask in YourWorkItem.WorkTasks)
{
//your logic here...
}