0

안녕하세요 내가 엔티티 프레임 워크에서 쿼리에 질문이 내 부모 항목 GROUPBY/합계 쿼리 문제는

입니다

workorders

내 자식 항목은 내가 모든 항목을 선택하고 싶은 workorderitems

입니다 workorder_id 열이 내 varialble (myid)과 일치하는 workorderitems 테이블 결과는 항목 이름별로 그룹화되어야하며 수량은 합산되어야합니다. 나는 GroupBySelect 문을 제거하는 경우 또한, 쿼리가 다시 반환하지

는 는 그러나 GroupBySelect 문에 내가 오류가 발생합니다.

var workorderitems= DBContext.WorkOrderItems 
.Where(o => o.workorder_id == myid) 
.GroupBy(grp => new { grp.ItemName }) 
.Select(result => new { itemname = result.Key.ItemName, qty = result.Sum(o => o.ItemQuantity) }); 



    var mycount = workorderitems.Count(); 

누군가가 내 synatax이 올 것 같으면 알려 수 : 아래

내 구문입니다?

+0

무엇이 오류입니까? – Magnus

+0

개체 참조가 개체의 인스턴스로 설정되지 않았습니다. 나는 이것이 쿼리가 값을 반환하지 않았다는 것을 의미한다고 생각할 것입니다. – user1287453

+0

값을 반환하기 전에 오류가 발생했음을 의미합니다. – Magnus

답변

0

실제로 GroupBy 메서드의 오버로드 중 하나를 사용하여 별도의 Select를 사용할 필요가 없습니다. 'keySelector'및 'resultSelector'매개 변수를 사용하여 그룹과 합계를 결합 할 수 있습니다.

GroupBy는 처음 엔 꽤 힘든 방법 일 수 있습니다. 그러나 일단 머리를 숙이면 상당히 직선적이며 매우 다양합니다.

예를 들어, 결과가 집계 된 WorkOrderItems 목록을 각 그룹에 하나씩 생성합니다. 익명 객체 목록을 반환하는 것이 아닙니다. 당신은 Linq에에서 가장 저평가 된 방법 중 하나에 추가 읽기를 위해 ...

class Program 
{ 
    static void Main(string[] args) 
    { 
     var myItems = new List<WorkOrderItem> 
     { 
      new WorkOrderItem { OrderId = 1, ItemName = "A", ItemQuantity = 0 }, 
      new WorkOrderItem { OrderId = 0, ItemName = "A", ItemQuantity = 1 }, 
      new WorkOrderItem { OrderId = 0, ItemName = "A", ItemQuantity = 2 }, 
      new WorkOrderItem { OrderId = 0, ItemName = "B", ItemQuantity = 3 }, 
      new WorkOrderItem { OrderId = 0, ItemName = "B", ItemQuantity = 4 }, 
      new WorkOrderItem { OrderId = 1, ItemName = "B", ItemQuantity = 5 }, 
      new WorkOrderItem { OrderId = 0, ItemName = "C", ItemQuantity = 6 }, 
     }; 

     int myId = 0; 

     List<WorkOrderItem> groupedItems = 
      myItems.Where(i => i.OrderId == myId) 
        .GroupBy(
         //key selector 
         i => i.ItemName, 
         //result selector 
         (name, items) => 
         { 
          var aggregatedItem = new WorkOrderItem 
          { 
           OrderId = myId, 
           ItemName = name, 
           ItemQuantity = items.Sum(i => i.ItemQuantity) 
          }; 
          return aggregatedItem; 
         }) 
         .ToList(); 


    } 

    class WorkOrderItem 
    { 
     public int OrderId { get; set; } 
     public string ItemName { get; set; } 
     public int ItemQuantity { get; set; } 
    } 
} 

여러 키 선택기 (GROUP BY 절)과이를 확장하고 합산하고, 결과 객체 (들)의 조작의 모든 방법을 할 수 Jon Skeet의 블로그 게시물을 살펴 보는 것이 좋습니다. http://codeblog.jonskeet.uk/2011/01/01/reimplementing-linq-to-objects-part-21-groupby/