2014-12-18 3 views
0

여러 열로 그룹화 한 다음 모든 레코드의 금액 필드를 하나의 레코드로 합산하려고합니다.EntityFramework IQueryable Group 여러 열 및 캡처 합계를 사용하십시오.

예를 들어 동일한 위치, 유형 및 제품이있는 세 개의 인벤토리 레코드가 있습니다. 나는 하나의 재고 레코드 (EFModel.Inventory의 인스턴스) 만 리턴하려고하지만 3 개의 레코드 모두에서 금액의 합계를 가져야합니다. 그러나 아직 쿼리를 실행하고 싶지 않습니다! 몇 가지 설명을 보려면 아래 코드를 확인하십시오. 쉽게 할 수있는 방법이 있습니까?

 IQueryable<EFModel.Inventory> query = GetInventoryView(); 
     if (searchParameters.GroupByLocation) 
     { 
      query = from inv in query 
        group inv by new { inv.LocationID, inv.LocationType, inv.ProductID } 
        into groupedInv 
        select groupedInv.First(); 
     } 

     // Now, perform filtering, sorting, paging and etc. on the query 

미리 감사드립니다.

+0

하지만 .First() 호출은 쿼리를 실행하고 if 문 끝까지 쿼리 엔티티 (있을 경우)가 포함됩니다. 그렇지 않으면 예외가 throw됩니다 . –

+0

예, 당신 말이 맞아요. 좋은 캐치! – Amir

답변

0

여기서 검색어는 사용자의 초기 컬렉션입니다.

IQueryable<EFModel.Inventory> query = GetInventoryView(); 
if (searchParameters.GroupByLocation) 
     { 

var model = query.GroupBy((group => 
           new { LocationID = group.LocationID, 
             LocationType = group.LocationType, 
             ProductID = group.ProductID 
            } 
         ) 
       .Select(select => 
       new <returning object>() { 
        total = select.Sum(total => total.{Amount Property}), 
        LocationID = select.Key.LocationID, 
        ...., 
        //other properties here 
        }); 
    //do other stuff here 

} 

이렇게하면 비슷한 작업을 수행 할 수 있습니다. 나는 당신의 질문을 올바르게 읽었다 고 가정합니다.

모든 문제는 저에게 알려줍니다. (코드 검사 감각이 있지만 작동하지 않아야합니다)

+0

'var model = query.GroupBy (...' –

+0

인벤토리 객체에는 약 25 개의 속성이 있습니다. 더 쉬운 방법이 있습니까? – Amir

+0

@AhmadIbrahim 좋은 캐치 감사합니다. (2am 코딩, p) –