1

SQLを使用すると、次のようになります...

SELECT G.* FROM GOAL G
INNER JOIN Plan P ON
P.planID = G.planID
INNER JOIN User U ON
U.userID = P.userID
WHERE U.userID = @userID

私のコントローラー(MVC4)では"ActionResult Edit"、次の2つのクエリを実行していますが、1つだけを実行するにはどうすればよいですか? 目標は、ユーザーが自分のデータに対してのみ「編集」アクションを実行できるようにすることと、他の誰かの目標に対して実行できるようにすることです。

var plan = db.Plan.Where(b => b.UserID == CurrentUserID).FirstOrDefault();
Goal goal = db.Goals
            .Where(b => b.PlanID == plan.ID)
            .FirstOrDefault();
return View(goal);

モデル

public class Plan
{
    public int ID { get; set; }
    [Required]
    public int UserID { get; set; }
}
[Table("PlanGoal")]
public class Goal
{
    public int ID { get; set; }

    [Required]
    public int PlanID { get; set; } 
}
4

2 に答える 2

2

クラスに仮想 Planプロパティを追加するGoal

public class Goal
{
    public int ID { get; set; }        
    public virtual Plan Plan { set;get;}    
    [Required]
    public int PlanID { get; set; } 
}

これで、このようにクエリできます

Goal goal = db.Goals
            .Where(b => b.Plan.UserID == CurrentUserID).FirstOrDefault();
于 2012-09-13T22:53:06.783 に答える
1

Goalまたは、クラスにプロパティを追加する代わりに、Goals と Plan を結合することもできます。

Goal goal = (from g in db.Goals
            from p in db.Plan
            where p.UserID == CurrentUserID
             && g.PlanID == p.ID
            select g).FirstOrDefault();
于 2012-09-13T23:08:29.827 に答える