2012-05-20 68 views
0

我是實體框架的新手,目前正在努力使用此編程範例。我有這個查詢,我想在實體SQL中編寫。實體SQL從多於3個表格中選擇

SELECT  f.id, f.personName, c.Category, j.busCode, s.description,   f.StartDate, (SELECT COUNT(*) FROM Analysis WHERE id = f.id) As numOfAnalysis 
FROM forms f 
INNER JOIN Jobs j ON f.id = j.id 
INNER JOIN category c ON j.categoryid = c.categoryid 
INNER JOIN stage s ON f.stageid = s.stageid 
WHERE j.busCode NOT IN ('xyz', 'YYY') 
ORDER BY startDate 

我可以從兩個表中得到記錄,但只要我使用導航屬性添加第三個表,我得到錯誤的表類是在當前情況下加載。我正在使用.net 3.5。請記住,EDM V2 doest沒有外鍵,我認爲遍歷表關係的唯一方法是導航屬性。

任何幫助將深表謝意。

感謝

Coder74

+0

你爲什麼不告訴我們你的代碼?我們怎麼可能猜測這個消息的原因? – usr

+0

除了上面的註釋 - 爲什麼你需要使用實體SQL來代替Linq To Entities? – Pawel

+0

如果您使用.net 3.5 linq-to-sql可能是一個更好的選擇。但是,導航屬性並不是唯一的方法。您始終可以使用linq連接語句。 –

回答

0

如果使用應該能夠裝入此Linq查詢。 我試圖放在一起,但在急於和沒有這樣的測試是複雜的。 您可以使用此引用作爲支持:http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

var result = (from f in forms 
      join j in Jobs on f.id equals j.id 
      join c in Category on j.categoryid equals c.categoryid 
      join s in stage on f.stageid equals s.stageid 
      join a in Analysis on a.id equals f.id 
      where !(new int[] { 'xyz', 'YYY' }).Contains(j.busCode) 
      orderby f.StartDate 
      select { 
       id =f.id, 
       personName = f.personName, 
       Category = c.Category, 
       busCode = j.busCode, 
       description = s.description, 
       StartDate = f.StartDate, 
       numOfAnalysis = a.Count() 
      }).ToList() 

胡里奧·斯派德

W¯¯&小號Soluções去上網