我正在嘗試構建複選框和單選按鈕的側欄搜索導航過濾器。我從數據庫中獲取值。類似以下內容,但共有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 但所有可能的解決方案高度依賴於如何如何表你正在查詢看起來像 –
如果'Color','Shape'和'Size'全部在同一個數據庫表中,那麼你可以對數據庫執行1次調用..將所有記錄存儲到列表中..然後只是根據記錄的類型過濾該列表喲你想。 –
你可以發佈'GetValuesFromDb()'方法嗎? –