2011-04-04 62 views
1

enter image description here問題的Linq查詢.NET MVC

public ActionResult Performances(string id) 
    { 
     var query = 
    from f in _db.Production 
    join g in _db.Run on f.show equals g.Production.show 
    join l in _db.Performance on g.startDate equals l.runStartDate 
    where f.show == id 
    select new ShowPerformance 
    { 
     Venuename = g.venue, 
     Showname = f.show, 
     RunStart = g.startDate, 
     RunEnd = g.endDate, 
     PerformanceDate = l.performanceDate, 
     PerformanceTime = l.performanceTime 
    }; 


    return View(query.ToList()); 


    } 

查詢無法在昭和RUN1,並顯示出性能之間distuingish RUN2它只是複製所有演出昭和RUN1,並顯示出RUN2

+0

你能提供數據庫中的數據嗎? – Femaref 2011-04-04 17:35:36

+0

首先,我可以建議更改變量名稱,使其更易於遵循(prod,run和perf,而不是f,g和l)。另外,我對連接線感興趣 - 什麼是Production.show? – HitLikeAHammer 2011-04-04 17:44:25

+0

@HitLikeAHammer @Femaref感謝您的回答。下面的答案完成了這項工作。 – 2011-04-04 17:53:26

回答

2

我想這個問題可能是你如何連接性能運行/生產

var query = 
     from f in _db.Production 
     join g in _db.Run on new {f.show, f.year} equals new {g.show, g.year} 
     join l in _db.Performance on new {g.venue, g.startDate} equals new {l.venue, l.runStartDate} 
     where f.show == id 
     select new ShowPerformance 
     { 
      Venuename = g.venue, 
      Showname = f.show, 
      RunStart = g.startDate, 
      RunEnd = g.endDate, 
      PerformanceDate = l.performanceDate, 
      PerformanceTime = l.performanceTime 
     }; 

沒有類似的on g.runId equals l.runId那麼你會得到所有的perfor爲所有制作/運行而設計。

+0

@Stuart由於查詢效果很好,只能獲得特定節目的表演。 – 2011-04-04 17:52:18

+0

@Stuart我已經添加了同一生產的另一個運行,並且查詢不區分運行併爲兩次運行都提供所有性能。如果可以提供一些幫助,我已經用我的呃圖的圖片更新了這個問題。 – 2011-04-04 20:00:04

+0

表演和跑步如何結合在一起?看起來你需要做一些非常複雜的CROSS JOIN,比如'where g.venue == l.venue && g.startDate <= l.performanceDate && g.endDate> = l.performanceDate' - 請坐下來思考一下這 - 你知道這個數據庫 - 我們不知道! – Stuart 2011-04-04 20:30:05