[英]ado.net entity framework using count in a where clause
我正在嘗試執行以下查詢,但是返回錯誤的結果。
foreach (var item in (from project in db.Projects
where project.Id == pProjectId
from task in project.Tasks
from taskItem in task.TaskItems
where taskItem.Velocities.Count() == 0 // not finished yet
select new
{
ProjectId = pProjectId,
PriorityId = task.Priorities.Id,
TaskId = task.Id,
ResourceId = taskItem.Resources.Id,
EstimatedDuration = taskItem.EstimatedDuration,
TaskItemId = taskItem.Id
}))
{
}
我正在嘗試從所有沒有與速度相關的對象的taskItem生成對象。 表結構是每個taskItem可能具有許多速度。 在此調用之前,我為某些項目提供了速度,但是它們未被該where子句過濾。 我在做明顯的錯誤嗎?
編輯:我認為(盯着代碼一會兒之后),我需要指定某種分組。 實際上,我不需要任何Velocity記錄詳細信息,而只是需要與taskItems相關的計數
您可以嘗試將taskItem.Velocities.Count()移動到選擇的新{}內部
然后在結果列表上進行選擇,其中velictes計數== 0
您需要具有聯接以反映關系,當前您正在執行笛卡爾(交叉)聯接(即項目,task和taskItem的所有組合)。
嘗試類似:
var res = from project in db.Projects
where project.Id == pProjectId
join task in project.Tasks on task.projectId equals project.projectId
join ttaskItem in task.TaskItems on taskItem.taskId equals task.taskId
where taskItem.Velocities.Count() == 0 // not finished yet
select new {
ProjectId = pProjectId,
PriorityId = task.Priorities.Id,
TaskId = task.Id,
ResourceId = taskItem.Resources.Id,
EstimatedDuration = taskItem.EstimatedDuration,
TaskItemId = taskItem.Id
};
查詢之前是否將更改保存到實體模型?
實體模型正在查詢數據庫以檢索這些值,如果您要向實體添加數據但尚未將其保存到數據庫中,則查詢將無法得知這些新值。
在查詢之前嘗試db.SaveChanges()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.