2017-02-22 125 views
0

我有什麼看起來像一個簡單的問題,但不能包裹我的頭。使用linq c過濾包含另一個表中的對象的對象#

我有兩個表格,一個包含問題,一個答覆。這些映射在一起,使得一個問題有許多allowedResponses。 EntityFramework很好地處理了這個映射,所以當我將控制器調用到GetQuestions時,我會回覆一系列可愛的問題,其中包含相應的響應。

我們最近擴展了系統以包含兩個用戶組 - 在本例中爲A和B.一些問題和一些迴應僅對某些團體有效。所以每個問題都有一個showToA showToB屬性 - 使用簡單的linq.where查詢可以很好地工作。但是我不知道如何使用參數showToGroupA調用getQuestions並讓它返回與指定組相關的問題和響應。

我基本上希望能夠得到所有相關的問題,並刪除任何不相關的回答。

任何幫助非常感謝,謝謝。

public class Question 
{ 
    [Key] 
    public int ID { get; set; } 
    public int QID { get; set; } 
    public string question { get; set; } 
    public string type { get; set; } 
    public virtual List<AllowedResponses> AllowedResponse { get; set; } 

    public int PrimaryOrderNo{ get; set; } 
    public int SecondaryOrderNo{ get; set; } 
    public bool ShowToGroupA{ get; set; } 
    public bool ShowToGroupB{ get; set; } 
} 

//Model of allowed responses to questions 
public class AllowedResponses 
{ 
    [Key] 
    public int ID { get; set; } 
    public virtual int QID { get; set; } 
    public string Response { get; set; } 
    public int ResponseID { get; set; } 
    public bool ShowToGroupA { get; set; } 
    public bool ShowToGroupB { get; set; } 
} 

目前,我只是返回的問題清單,通過適當的排序,對這個問題是否應該被顯示到組過濾 - 不過濾AllowedResponses。

List<Questions> Questions = _repo.GetQuestions(); 
     Questions = Questions.OrderBy(x => x.GroupAOrderNo).ToList(); 
     List<Questions> QuestionsFiltered; 
     if (GroupAorB == "A") 
     { 
      QuestionsFiltered = Questions.Where(a => a.ShowToA == true).ToList(); 
     } else 
     { 
      QuestionsFiltered = Questions.Where(a => a.ShowToB == true).ToList(); 
     } 
     return Request.CreateResponse(HttpStatusCode.OK, Questions); 

請注意我在這裏簡化了代碼並更改了一些名稱,請原諒在邏輯中導致的任何故障。

+0

哪裏的代碼不能正常工作? –

+1

因此,如果我理解正確,可以將標記爲ShowToGroupA的問題標記爲ShowToGroupB。 – grek40

+0

是的,這是正確的,因爲問題和答案是兩個單獨的實體。將來我們可能會決定向不同的羣體展示不同的問題。 – anthonyhumphreys

回答

1

你可以過濾掉在一個新的對象喜歡你的回答: -

List<Questions> Questions = _repo.GetQuestions(); 
    Questions = Questions.OrderBy(x => x.GroupAOrderNo).ToList(); 
var FilteredQuestions = 
       Questions.Where(a => GroupAorB == "A" ? a.ShowToGroupA : a.ShowToGroupB).Select(q => new Question 
       { 
        ID = q.ID, 
        AllowedResponse = 
         q.AllowedResponse.Where(r => GroupAorB == "A" ? r.ShowToGroupA : r.ShowToGroupB).ToList() 

       }).ToList(); 
return Request.CreateResponse(HttpStatusCode.OK, Questions); 
+0

太棒了,非常感謝你的回答 – anthonyhumphreys

+1

很高興幫助你 – jitender

相關問題