2017-02-14 1 views
0

확인란 및 라디오 버튼의 사이드 바 검색 탐색 필터를 작성하려고합니다. 데이터베이스에서 값을 가져옵니다. 다음과 같은 항목이 있지만 총 12 개의 필터 카테고리가 있습니다.큰 데이터 세트를 작은 그룹으로 나누기

아래 코드와 같은 것을 사용하면 저에게 효과적입니다. 그러나 하위 범주 각각에 대한 데이터베이스 호출을 정말 비효율적 인 것 같다

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 
+0

은 GroupBy https://msdn.microsoft.com/en-us/library/system.linq.enumerable.groupby(v=vs.110).aspx 을 사용할 수 있지만 모든 가능한 솔루션은 테이블이 어떻게 당신은 –

+0

과 같은 질의를하고 있습니다.'Color','Shape', 그리고'Size'가 모두 같은 데이터베이스 테이블에 있다면 ... 당신은 데이터베이스에 1 번의 호출을 할 수 있습니다 .. 모든 레코드를리스트에 저장하십시오. 그 목록을 레코드 유형에 따라 필터링하십시오. 너를 원해. –

+0

'GetValuesFromDb()'메소드를 게시 할 수 있습니까? –

답변

1

그것은 수도 있고 DB 호출의 성능에 대한 우려 일찍 개발에 조금하지 않을 수 있습니다. 메뉴 값이 자주 변경되지 않거나 다른 컨텍스트에서 변경되지 않으면 메뉴 구조가 사용자와 같이 데이터베이스에 저장되는 것이 더 적합 할 수 있습니다. 메뉴 값이 자주 변경되지 않으면 앱을 처음로드 할 때로드되는 프로그램 코드 또는 설정 파일에 값을 저장하는 것이 좋을 수도 있습니다.

:

난 당신이 찾고있는 상황에서 LINQ는 "GetALLSearchValuesFromDb는()"방법은 당신이 이미 가지고있는 것처럼 만 WHERE 절없이 SQL 문에 의해 생성 된 IEnumerable을을 반환 곳처럼 뭔가를 갈 것 같아요

public ActionResult Index() 
{ 
    SearchBarViewModel model = new SearchBarViewModel(); 
    var searchvalues = GetALLSearchValuesFromDb(); 
    model.Color = searchvalues.Where(sv => sv.Name == "Color"); 
    model.Size = searchvalues.Where(sv => sv.Name == "Size"); 
    model.Shape = searchvalues.Where(sv => sv.Name == "Shape"); 
    return View(model) 
} 
+0

네, 이것은 제가 생각한 해결책과 같습니다. 나는 그것을 볼 때까지 시각화 할 수 없었습니다. 유용한 게시물 주셔서 감사합니다! – PixelPaul

관련 문제