Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在where子句中使用count的ado.net实体框架_C#_Linq_Entity Framework_.net 3.5_Ado.net - Fatal编程技术网

C# 在where子句中使用count的ado.net实体框架

C# 在where子句中使用count的ado.net实体框架,c#,linq,entity-framework,.net-3.5,ado.net,C#,Linq,Entity Framework,.net 3.5,Ado.net,我试图执行以下查询,但返回了错误的结果 foreach (var item in (from project in db.Projects where project.Id == pProjectId from task in project.Tasks from taskItem in task.Ta

我试图执行以下查询,但返回了错误的结果

        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
                              }))
        {
        }
我正在尝试从所有没有速度相关对象的taskItems生成对象。表格结构是,每个任务项可能有许多速度。在这个调用之前,我给出了一些项目的速度,但是它们并没有被where子句过滤。我是不是做错了什么


编辑:我认为(在盯着代码看了一会儿之后)我需要指定某种类型的分组。实际上,我不需要任何Velocity记录的详细信息,只需要计算与taskItems相关的详细信息。您需要连接以反映关系,目前您正在进行笛卡尔(交叉)连接(即项目、任务和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
          };

您可以尝试将taskItem.velocies.Count()移动到select new{}


然后在结果列表中进行选择,其中级别计数==0

您在查询之前是否保存了对实体模型的更改

实体模型正在查询您的数据库以检索这些值,如果您正在向实体添加数据但尚未将其保存到数据库,则查询无法了解这些新值


在查询之前尝试db.SaveChanges()。

我认为这不是正确答案。“project.Tasks中的from task”实际上执行一个内部连接,因此我相信如果我按照您的建议执行,那么实际上必须是“join task in db.Tasks”&c,在这种情况下,我将创建一个连接,我可以免费获得该连接。此外它给出了完全相同(错误)的结果:/不过谢谢!您还可以使用以下命令执行左外部联接:。。。将r.prop上的source中的r与other.prop合并成行。但如果不了解更多的数据模型,就很难具体说明。(仅检查具有多个速度的taskItems在您的原始版本中是正确的。)这就是我所做的。。。在这一点上,我的应用程序表现良好,如果有点次优。