【发布时间】:2017-02-14 23:36:34
【问题描述】:
我正在尝试构建复选框和单选按钮的侧边栏搜索导航过滤器。我正在从数据库中获取值。类似于以下内容,但共有 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 msdn.microsoft.com/en-us/library/…,但所有可能的解决方案在很大程度上取决于您查询的表的外观
-
如果
Color、Shape和Size都在同一个数据库表中......那么你可以只调用数据库一次......将所有记录存储到一个列表中......然后只需根据您想要的记录类型过滤该列表。 -
你能发布
GetValuesFromDb()方法吗? -
这个答案可以帮到你stackoverflow.com/a/15124989/335905