2011-06-01 146 views
3

我已閱讀了一堆關於此的不同主題,但我還沒有找到我在找什麼。linq過濾子集合

我有一個EF查詢是這樣的:

var query = this.ObjectContext.Questions 
      .Include("AnswerKey").Include("QuestionTypes") 
      .Where(o => o.SurveyQuestions.Any(o2 => o2.SurveyID == id)); 

這是工作的罰款,直到我意識到,我並沒有考慮到的AnswerKey子集合我主動標誌。換句話說,這個查詢應該加載所有具有3的父調查問題(它確實)的問題,但只加載具有有效標誌爲真的答案鍵。

我已經試過這樣:

var query = this.ObjectContext.AnswerKey 
       .Include("Questions.QuestionTypes") 
       .Where(ak => 
        ak.Active == true && 
        ak.Questions.SurveyQuestions.Any(sq => sq.SurveyID == 3) && 
        ak.Questions.Active == true) 
        .AsEnumerable() 
        .Select(ak => ak.Questions).AsQueryable(); 

但它返回每個answerkey 1個問題。所以如果一個問題有4個答案,它顯示了4倍...

我該怎麼做?

回答

2

你可以只使用Distinct()末過濾掉重複:

.AsEnumerable() 
    .Select(ak => ak.Questions) 
    .Distinct() 
    .AsQueryable(); 
1

Brokenglass我會嘗試你的建議。並給你信貸,如果它的工作原理..

I also found this here之後,以下的另一個鏈接...這似乎工作,但我需要在我的應用程序進行驗證。

+1

您應該使用您發佈的鏈接中提供的解決方案,因爲您只實現了真正需要的實體,所以這將更有效。 – BrokenGlass 2011-06-01 17:47:16

+0

我認爲你的效率一樣。同一作者也在這裏發佈了一個類似的例子http://stackoverflow.com/questions/1535443/ef-query-with-conditinal-include/1535618 – ecathell 2011-06-01 20:02:02