-1

LINQ to SQL を使用しています。

Projects テーブルがあります。Tasks テーブルもあります。タスクはプロジェクトを持つことができます。

タスクを持たないプロジェクトのリストを返すことができるクエリが欲しいです。

プロジェクトのすべてのタスクを見つける方法は次のとおりです。

   public static IEnumerable<Task> GetAllByProject(int? projectID)
   {
         KezberPMDBDataContext db = new KezberPMDBDataContext();
         return from p in db.Tasks
                where p.ProjectID == projectID
                select p;
   }

ここで、上記のクエリが何も返さないすべてのプロジェクトを見つける必要があります。

4

1 に答える 1

3
return db.Projects.Where(p=>!p.Tasks.Any())

Project と Task の間に FK 関係が存在し、1 対多であると仮定します。それ以外の場合は、すべてのタスクからプロジェクト ID を見つけて、それらの ID の範囲外にあるプロジェクトを見つけてみましょう。

var taskProjectIds = db.Tasks.Select(t=>t.ProjectId).Distinct();
return db.Projects.Where(p=>!taskProjectIds.Any(p.Id))
于 2013-01-18T19:02:09.463 に答える