2009-07-06 18 views
0

次のクエリを実行しようとしていますが、間違った結果が返されます。ado.netエンティティフレームワークでwhere句のcountを使用

 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からオブジェクトを生成しようとしています。テーブル構造は、すべてのtaskItemが多くのベロシティを持つことができるということです。この呼び出しの直前に、いくつかのアイテムに速度を与えますが、このwhere句ではフィルタリングされません。間違った何かをしているのですか?

編集:私は(ある程度コードを見た後で)何らかのグループ化を指定する必要があると思います。私は実際にはベロシティのレコードの詳細を必要としませんが、タスクに関連するものの数だけです。項目

答えて

2

のようなものを試してみてください= 0

+0

これは私がやったことです...この時点では、私のアプリケーションは少し劣っていればうまく動作します。 –

0

現在、あなたはデカルト(クロス)ジョインをしていますすなわち、プロジェクト、タスク、およびタスク項目のすべての組み合わせ)。 =あなたは

はその後velictiesカウント結果リスト上の選択を行う} {選択新しい内taskItem.Velocities.Count()を移動しようとすることができ

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 
      }; 
+1

私はこれが正しい答えだとは思わない。 'project.Tasksのタスクから'実際に内部結合を実行するので、もし私があなたが実際に 'db.Tasks'のタスクに参加する必要があると示唆したことを信じて&cどの場合に私は、無料で入手できます。それだけでなく、それはまったく同じ(間違った)結果を与える:/ありがとう! –

+0

また、左外部結合を行うこともできます。... r.propのソースのjoin rはother.propを行に等しくします。しかし、あなたのデータモデルの詳細を特定するのは難しいです。 (複数のベロシティを持つtaskItemsのチェックはオリジナルでは正しいです。) – Richard

0

クエリの前にエンティティモデルに変更を保存しましたか?

エンティティモデルはデータベースにクエリを実行してこれらの値を取得していますが、エンティティにデータを追加してもデータベースに保存していない場合、クエリはこれらの新しい値を知ることができません。

クエリの前にdb.SaveChanges()を試してください。

関連する問題