我有什麼看起來像一個簡單的問題,但不能包裹我的頭。使用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);
請注意我在這裏簡化了代碼並更改了一些名稱,請原諒在邏輯中導致的任何故障。
哪裏的代碼不能正常工作? –
因此,如果我理解正確,可以將標記爲ShowToGroupA的問題標記爲ShowToGroupB。 – grek40
是的,這是正確的,因爲問題和答案是兩個單獨的實體。將來我們可能會決定向不同的羣體展示不同的問題。 – anthonyhumphreys