У меня есть класс Курс , который содержит 4 одинаковых набора классов (VideoTask, QuizTask, TextTask, QuestionTask), также у них есть базовый класс Task.Each
Задача принадлежит к Topic (от TopicId), а также имеет свойство Order (потому что мне нужно сохранить порядок задач в каждой теме).
Course.cs
public class Course: INamedEntity
{
public string Name { get; set; }
public int Id { get; set; }
public ICollection<Topic> Topics { get; set; }
public ICollection<QuizTask> QuizTasks { get; set; }
public ICollection<QuestionTask> QuestionTasks { get; set; }
public virtual ICollection<TextTask> TextTasks { get; set; }
public ICollection<VideoTask> VideoTasks { get; set; }
}
Пример задачи
public class VideoTask : Task
{
public int TopicId { get; set; }
public int Order { get; set; }
public string VideoUrl { get; set; }
}
Мой вопрос - как наилучшим образом организовать эту структуру? Потому что сейчас я должен делать «ужасные» вещи, такие как:
Получить эти задания отдельно от EF и затем перенести их в коллекцию:
public IEnumerable<Task> GetTasksOfCourse(TaskFilter filter)
{
var course = GetFullCourse(filter.CourseId);
List<Task> tasks = new List<Task>();
tasks.AddRange(course.QuestionTasks.Where(t=>t.TopicId == filter.TopicId));
tasks.AddRange(course.QuizTasks.Where(t => t.TopicId == filter.TopicId));
tasks.AddRange(course.TextTasks.Where(t => t.TopicId == filter.TopicId));
tasks.AddRange(course.VideoTasks.Where(t => t.TopicId == filter.TopicId));
return tasks;
}
И затем, прямо в виде, я должен вернуть их обратно:
@model IEnumerable<Task>
@foreach (var task in Model)
{
if (task is QuestionTask)
{
@await Html.PartialAsync("Partial/_QuestionTask", (QuestionTask)task)
}
if (task is QuizTask)
{
@await Html.PartialAsync("Partial/_QuizTask", (QuizTask)task)
}
if (task is TextTask)
{
@await Html.PartialAsync("Partial/_TextTask", (TextTask)task)
}
if (task is VideoTask)
{
@await Html.PartialAsync("Partial/_VideoTask", (VideoTask)task)
}
}
Все это выглядит ужасно, но я не знаю, что делать.