У меня есть простая проблема, но я не могу обернуть вокруг нее голову.Фильтрация объекта, содержащего объекты из другой таблицы с использованием linq C#
У меня есть две таблицы, одна содержит вопросы, ответы. Они сопоставляются друг с другом таким образом, что один вопрос имеет много разрешенных разрешений. EntityFramework обрабатывает это сопоставление очень красиво, поэтому, когда я вызываю контроллер в GetQuestions, я возвращаю прекрасный набор вопросов, содержащих их соответствующие ответы.
Недавно мы расширили систему, включив в этот пример две группы пользователей - A и B. Некоторые вопросы и некоторые ответы действительны только для определенных групп. Таким образом, каждый вопрос имеет свойство showToA showToB - это отлично работает, используя простой запрос linq.where. Однако я не могу понять, как вызвать getQuestions с параметром showToGroupA и вернуть ему вопросы и ответы, ТОЛЬКО относящиеся к указанной группе.
Я по сути хочу иметь возможность получить все соответствующие вопросы и исключить любые нерелевантные ответы.
Любая помощь очень ценится, спасибо.
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