我正在學習Linq到自己的實體,我有一個問題。看看下面的方法。它會爲List of WorkflowsInProgress
中的每個項目返回最近完成的任務。此方法正在使用其他方法調用,其中我使用的是fields of TasksInProgress
,但我也使用the linked Tasks and WorkflowInProgress
的屬性。如您所見,我已將Include
添加到查詢中。Linq to Entities 4.0('Include'):在尋找一個優雅的方式
public List<TasksInProgress> GetLatestTaskForWorkflowsInProcess(List<WorkflowInProgress> pWorkflowsInProcess)
{
List<TasksInProgress> tasksLst = new List<TasksInProgress>();
List<Int64> workflowIds = pWorkflowsInProcess.Select(w => w.Id).ToList();
using (TaskWorkflowEntities myDatacontext = new TaskWorkflowEntities())
{
tasksLst = (from taskP in myDatacontext.TasksInProgress.Include("Tasks").Include("WorkflowInProgress")
where (taskP.RunningState == (int)WorkflowRunningStates.Completed) &&
workflowIds.Contains(taskP.WorkflowInProgressId) &&
taskP.Completed == (from sTaskP in myDatacontext.TasksInProgress
where sTaskP.WorkflowInProgressId == taskP.WorkflowInProgressId
group sTaskP by sTaskP.WorkflowInProgressId into gSTaskP
select gSTaskP.Max(g => g.Completed)).FirstOrDefault()
select taskP).ToList<TasksInProgress>();
}
return tasksLst;
}
我的問題是:
'有沒有更優雅的方式,包括查詢內的其他表?' 因爲我不喜歡那些剛剛坐在那裏的硬編碼對象名'(想象一下,如果表名更改...)
或者是否有任何其他方式可以用來包含鏈接對象/導航屬性的字段?
注意:這一個以上的梅索德的示例:
foreach(TasksInProgress taskInProc in _taskWorkflowS.GetLatestTaskForWorkflowsInProcess(currentWorkflowsInProcess))
{
//Do something with (int)taskInProc.Tasks.TaskOrder
//Do something with taskInProc.WorkflowInProgress.WorkflowId
// ...
//for Instance
int i = 0;
i = _taskWorkflowS.GetAmountOfTasksForWorkflow(taskInProc.WorkflowInProgress.WorkflowId, (int)taskInProc.Tasks.TaskOrder)
if (i > 0)
{ ... }
}
更新: 使用lambda表達式作爲Include
的參數似乎沒有被工作由於這樣的事實它只有字符串除外(見下圖):
請檢查這個答案在這裏http://stackoverflow.com/questions/6102909/entity-framework-include-strongly-typed#answer-10843340 – NightOwl89
你使用什麼版本的實體框架? – Loetn
EF 4.0 =>這是公司內最新的分佈式版本。 – User999999