2013-01-23 43 views
0

我有這樣的SQL,產生預期的效果:轉換這個SQL以拉姆達爲代碼優先EF

select * from Categories as c 
inner join Questions as q on c.Id = q.CategoryId 
inner join Surveys as s on s.Id = q.SurveyId 
where s.RoleId = 2 

我想將其轉換爲一個lambda表達式。

它是如何工作:爲每個用戶角色

  • 單一的調查存在
  • 調查中包含的問題
  • 的問題集屬於一個類別

我想拉動整個調查,用Category.Questions等方法遍歷結果(已經構建了循環)。

任何對此的幫助將不勝感激,因爲我試圖在5年以上的迴避之後重新回到.NET場景......提前感謝您。

+0

爲什麼有人會「避免」.Net? –

+0

這是使用EF的必備條件嗎?如果你對sql感到滿意,可以直接使用它。 – MikeSW

+0

@MikeSW - 這是管理層所希望的,因爲它與團隊建立其他項目的方式一致。我對EF很新,所以這對我來說是一個挑戰... – Steve

回答

1

事情是這樣的,如果你的意思是LINQ:

var query = (from c in dataContext.Categories 
        join q in dataContext.Questions on q.CategoryId = c.Id 
        join s in dataContext.Surveys on q.SurveyId = s.Id 
      where c.RoleId = 5 
      select new 
      { 
       [Your Fields] 
      }); 
0

這個特定的查詢我會persaonally喜歡的LINQ寫的不黏巴達表達

var query=(from c in db.Categories from q in Questions from n in Surveys where c.Id == 
q.CategoryId && q.SurveyId==n.Id && n..RoleId == 2).ToList(); 
0

解決了這個利用:

List<Question> questions = db.questions.Where(q => q.Survey.RoleId == iroleId).ToList(); 

並過濾了我的視圖中的結果集:

foreach (Tracker.Models.Category category in Model.Select(x => x.Category).Distinct().ToList()) 
{ 
    ... 
    foreach (Tracker.Models.Question question in Model.Where(x => x.Survey.RoleId == ViewBag.UserRoleId && x.CategoryId == catLoop.Id).ToList()) 

似乎有點混亂,但我的預期,但解決方案的作品。有沒有比這更好的方法,雖然...