У меня есть таблица элементов флажков и таблица, в которой хранятся выбранные пользователями элементы флажков. Разветвленная модель в основном похожа на это в EF
CheckboxItem Свойства модели:
public CheckboxItem()
{
SelectedCheckboxItems = new HashSet<SelectedCheckboxItems>
}
public int Id { get; set; }
public virtual ICollection<SelectedCheckboxItems> SelectedCheckboxItems { get; set; }
SelectedCheckboxItems Свойства модели:
public int Id { get; set; }
public virtual Checkbox Checkbox { get; set; }
Я пытаюсь захватить все доступные элементы-флажки вместе с соответствующими выбранными элементами-флажками и вставьте их в модель представления, которую я буду использовать позже, чтобы заполнить представление правильными флажками / предварительно выбрать их выбранные варианты.
У меня есть пока что рабочее решение, но запрос медленный, его выполнение занимает около 4-5 секунд:
var testSub = _context.CheckboxItem.Include(a => a.SelectedCheckboxItems).Where(a => a...// filters)
.Select(a => new ViewModel
{
CheckboxItemId = a.Id,
Checked = a.SelectedCheckboxItems.Where(x => x.userId.Equals(userId) && x.Id == a.Id).Select(z => z.Checked == true).FirstOrDefault()
}).AsNoTracking().ToList();
Конечная цель - просто вернуть список объектов ViewModel со всеми доступными элементами-флажками и был ли этот элемент выбран пользователем или нет.
Какие-либо советы о том, как улучшить это или каким-либо образом оптимизировать его, чтобы он был намного быстрее? На самом деле в таблице только 15 доступных элементов-флажков, поэтому для этого запроса он выглядит просто медлительно sh, чтобы завершить sh за 4-5 секунд.