私は、チェックボックスとラジオボタンのサイドバー検索ナビゲーションフィルタを構築しようとしています。私はデータベースから値を取得しています。以下のような、しかし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()'メソッドを投稿できますか? –