2011-10-17 126 views
0

我是一個很長時間的開發人員,但對LINQ來說還是一個新手。在處理一組對象時,我可以,但是當我需要從幾個來源獲取信息時,事情變得更加困難,我可以使用一些指導來獲得我需要的信息。LINQ Noob,我該如何編寫這個通用查詢?

我在我的數據庫中有三個表格,兩個相關的表格和一個持有PK/FK將它們連接在一起的表格。因此,像:

用戶

  • 用戶名
  • 用戶名

調查

  • SurveyID
  • SurveyName

UserSurveys

  • 用戶名
  • SurveyID

我使用EF等所有這些數據已經被拉到對象。

所以...我想要做的是返回與給定用戶關聯的所有調查列表。因此,像(僞代碼):

// currentUserID = the UserID I need to get matching Surveys for 
var surveys = from Survey where (s => s.SurveyID == UserSurvey.SurveyID && UserSurvey.UserID == currentUserID); 

我想我需要做一個子查詢,並使用了一個contains()或類似的東西,但我一直絆倒自己。幫幫我?

+0

什麼是UserSurvey?它是一個多對多的表格嗎? –

+0

是的。上面的用戶和調查表簡化了,但UserSurveys真的非常簡單。它只是表示哪些調查與哪些用戶相關聯。 –

+0

如果UserSurveys只是這兩個字段,那麼在您的edmx文件中,您是否只有兩個EntityType(用戶和調查)?如果是的話,我會同意亨克。 –

回答

2

應該是這樣的:

from us in UserSurveys 
where us.UserId == currentUserID 
join s in Surveys on us.SurveyID equals s.SurveyID 
select s 
1

假設你的數據庫和實體模型所有的FK引用的,你應該能夠做這樣的事....

// currentUserID = the UserID I need to get matching Surveys for 
var surveys = from s in Survey 
       where s.User.UserID == currentUserID 
       select s; 
2

如果這是EF你應該可以做someUser.Surveys

+0

我同意。但建立數據庫的人(不是我)實際上並不是FK。可以這麼說,所有東西都是「解耦」的,所以當EF掃描數據庫並創建對象時,它並沒有將任何東西鏈接在一起。我想我可以進入並創建這些關係,這應該完成,但是在我緊張的時間表上,我只需要讓它現在就工作。 :) –