2016-06-02 2 views
0

나는 프로젝트에서 일하고 있는데, 각 지역에서 오는 많은 양의 데이터가있을 수 있다고 들었습니다. 일단 우리가 살면 응용 프로그램이 느려질 수 있다는 걱정입니다. 결과적으로 QA 팀에 부하 테스트를 요청했습니다. 관리자는 그들이 할 수있는 도구 및/또는 자원이 없기 때문에 아니오라고 말했습니다. 코드를 최적화하기 위해 할 수있는 것에 대한 피드백을 받고 싶습니다.Loading 및 필터링 Linq를 사용하여 엄청난 양의 데이터

if 문을 고유 한 메서드로 옮기려고 생각하고 있으므로이 영역을 통과하는 switch case에서 호출 할 수 있습니다. 그런 다음 if 문에서 LINQ to 메서드 구문을 사용하여 식을 전달합니다. 대신 regionOrder.Where, 그것은 db.orders.where는 (검색 환경 설정 (들)에 따라 이름, 위치, 날짜를 통과 할 것이다.

List<order> result = null; 
List<order> regionOrder = null; 

switch (region) 
{ 
    case "NorthEast": 
     regionOrder = db.orders.Where(x => x.Name == region).ToList(); 
     break; 
    case "SouthEast": 
     regionOrder = db.orders.Where(x => x.Name == region).ToList(); 
     break; 
} 

if (order.Name.IsNotNull() && order.Location.IsNotNull() && order.DateOrdered != null) 
{ 
    result = regionorder.Where(x => x.Name == order.Name && x.Location == order.Location && x.DateOrdered == order.DateOrdered); 
} 
else if (order.Name.IsNotNull() && order.Location.IsNotNull()) 
{ 
    result = regionOrder.Where(x => x.Name == order.Name && x.Location == order.Location); 
} else if (order.Name.IsNotNull() && order.DateOrdered != null) 
{ 
    result = regionOrder.Where(x => x.Name == order.Name && x.DateOrdered == order.DateOrdered); 
} else if (order.Location.IsNotNull() && order.DateOrdered != null) 
{ 
    result = regionOrder.Where(x => x.Location == order.Location && x.DateOrdered == order.DateOrdered); 
} else if (order.Name.IsNotNull()) 
{ 
    result = regionOrder.Where(x => x.Name == order.Name); 
} 
else if (order.Location.IsNotNull()) 
{ 
    result = regionOrder.Where(x => x.Location == order.Location); 
} 
else if (order.DateOrdered != null) 
{ 
    result = regionOrder.Where(x => x.DateOrdered == order.DateOrdered); 
} 
+1

데이터가 메모리에 구체화되지 않도록 쿼리에서 제거'.ToList()'(그러나 모두'의 경우'문 그래서 당신이 그와 함께 일을하려고 무엇인지 분명하지 동일) –

+1

그리고 모든 if (order.Name.IsNotNull()) {result = regionOrder.Where (x => x.Name == order.Name); 3 개의 if 문이 필요합니다. }; if (order.Location.IsNotNull()) {....}; if (order.DateOrdered! = null) {...};'result'는'IEnumerable '입니다. –

+0

예, 변경하겠습니다. 나는 지역을 하드 코딩했다. 그런 다음 드롭 다운에서 영역을 선택하는 매개 변수를 추가했습니다. –

답변

4

.ToList()의 사용은이 모든 기록을 읽는 것을 의미한다 은 An 메모리 세트에서 데이터베이스 그리고 모든 if/else 블록에 대한 필요가 없습니다 -. 당신이 필요로하는 모든이 3 if 문이고, 당신이 코드를 단순히

IQueryable<order> regionOrder = db.orders.Where(x => x.Name == region) 
if (order.Name.IsNotNull()) 
{ 
    regionOrder = regionOrder.Where(x => x.Name == order.Name); 
} 
if (order.Location.IsNotNull()) 
{ 
    regionOrder = regionOrder.Where(x => x.Location == order.Location); 
} 
if (order.DateOrdered != null) 
{ 
    regionOrder = regionOrder.Where(x => x.DateOrdered == order.DateOrdered); 
} 
올바른 SQL 쿼리로 변환합니다

될 수 있습니다 필요한 결과 만 반환합니다. 그런 다음 실행중인 이미지를 가져 오는 메모리 내 세트를 만들려면 iately

List<order> result = regionOrder.ToList(); 
+0

감사합니다. @IvanStoev –

관련 문제