Я пытаюсь создать навигационные фильтры боковой панели с переключателями и переключателями. Я получаю значения из базы данных. Что-то вроде следующего, но с 12 категорий фильтров всего:Разделение большого набора данных на более мелкие группы
Color
[] red
[] green
[] blue
Size
[] small
[] medium
[] large
Shape
[] square
[] circle
[] triangle
Это работает для меня использовать что-то вроде кода ниже. Но, кажется, действительно неэффективно сделать запрос к базе данных для каждого из подкатегорий:
public ActionResult Index()
{
SearchBarViewModel model = new SearchBarViewModel();
model.Color = GetValuesFromDb();
model.Size = GetValuesFromDb();
model.Shape = GetValuesFromDb();
return View(model)
}
Я предполагаю, что есть более эффективный способ сделать это, сделав один запрос к базе данных, возвращая большой набор данных, содержит все значения категорий, и они разбиваются на группы с linq? Я просто не знаю, как это будет сделано?
схемы базы данных *
SearchKey SearchValue
--------- -----------------
Id Name Id KeyId Value
--------- -----------------
1 Color 1 1 Red
2 Size 2 1 Green
3 Shape 3 1 Blue
4 2 Small
5 2 Medium
6 2 Large
Sql запрос
SELECT sv.Id, sv.Value
FROM SearchKey sk
JOIN SearchValue sv ON sv.KeyId = sk.Id
WHERE sk.Name = @ValuePassedToSP
может использовать GroupBy https://msdn.microsoft.com/en-us/library/system.linq.enumerable.groupby(v=vs.110).aspx , но все возможные решения сильно зависят от того, как таблица вы запрашиваете, выглядит так: –
Если 'Цвет',' Форма' и 'Размер' находятся в одной таблице базы данных .. тогда вы могли бы просто сделать 1 вызов в базе данных .. сохранить все записи в список .. тогда просто фильтровать этот список в зависимости от типа записей yo ты хочешь. –
Можете ли вы опубликовать метод GetValuesFromDb()? –