我有一个看似简单的问题,但无法绕过它。
我有两个表,一个包含问题,一个包含回复。它们被映射在一起,使得一个问题具有许多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)
您可以在新对象中过滤掉您的回复,例如: -
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);