2011-08-03 2 views
1

좋아요, 그럼 저는 3 열로 목록보기 컨트롤이 있습니다 :linq to sql, 집계 열, 날짜순으로 그룹화하여 목록보기

년 | NetTotal | GrossTotal

나는 여러 개의 열이있는 Orders라는 테이블을 가지고 있으며 주문에 대한 정보를 포함하고 그들이 속한 고객의 ID를 저장합니다.

질문 : 내가 선호하는 linq (datacontext는 LinqToSql에서) 테이블을 쿼리하여 다음 데이터를 반환 할 수 있습니까?

일치하는 CustomerID가있는 항목을 모두 검색하고 연도별로 그룹화하고 합계를 각각 합한 다음 목록보기에 추가하고 싶습니다.

나는 지금은 람다 표현식과 집계를 사용할 수의 (옵션, DB는 데이터 컨텍스트 객체 인에 대한 추론, CustomerID를가 INT32 변수입니다) 방법 단지 명확하지 :

Dim Orders = (From order In db.Orders Where order.CustomerID = CustomerID).GroupBy(Function(p) p.Date.Year).GetEnumerator 

내가 거라고 이해 할수가 다음과 같은 익명 유형을 만듭니다.

Dim tmpYears = From prevs In db.Orders Select New With {.CustID = prevs.CustomerID, .Year = prevs.PaymentDate.Year, .NetPurchase, .GrossPurchase} 

그러나 그룹에서 Purchased 열을 어떻게 집계합니까?

Dim CustomerOrders = From ord In db.Orders Where Ord.CustomerID = custID Select ord 
Dim tot = From O in CustomerOrders Select Aggregate netTot In O Into Sum(netTot.Price * netTot.Quantity * 1+ (netTot.Discount/100)) 

두 개를 병합하고 싶습니다.

제안 사항? (나는 this을 읽었지만 팀 프로젝트 때문에 우리는 Linq에서 그것을 원한다. Linq를 사용하는 대신에 .ExecuteQuerys와 db.Also를 LinqToSQL 솔루션으로 보내는 것에 동의했다. 그래서 내가 LinqToSQL 솔루션을 사용할 수 있다면 더 좋을 것이다. 그것)

답변

1

귀하의 요구 사항을 정확히 이해할 수는 없지만, 주문 내용이 제공된 고객 ID와 일치하는 순/총액 합계로 연도별로 그룹화 된 주문을 표시하려는 것 같습니다. ? 이것은 내가 나와있는 요구 사항에 따라 채워 Year, NetTotalGrossTotal가 포함 된 익명 형식을 제공해야

Dim results = db.Orders.Where(Function(n) n.CustomerId = customerId).GroupBy(Function(n) n.Date.Year, Function(key, values) New With {.Year = key, .NetTotal = values.Sum(Function(n) n.NetPurchase * n.Quantity * (1 + (n.Discount/100))), .GrossTotal = values.Sum(Function(n) n.GrossPurchase)}) 

구문하지만이 자유를하고있어 약간 벗어난 경우

죄송합니다 ....

편집 : 한 라이너에 대한 사과 또한 맛볼 수 있습니다.

+0

감사합니다, 감사합니다 : oneliners도 좋아합니다.) – Qqbt

+0

나는 큰 팬이기도하며, 한 줄짜리가 나쁜 소식이라는 것을 알고 있습니다. 귀하의 질문에 대한 속임수는'GroupBy'에 대한 과부하였습니다. 그러나 아마 지금까지 그 점을 발견했을 것입니다. 나는 하나의 라이너에 관해서 모든 옵션 중에서 가장 좋아하는 것으로 발견 한'resultSelector'을 가진 오버로드를 사용하고 있습니다. :-) – Smudge202

+0

당신 말이 맞아요. 그리고 이것의 가장 중요한 부분은 (대부분의 linq 질의와 같이) 결과가 열거 할 수 있다는 것입니다 .... 인생은 IT 땅에서 위대합니다 ... 때로는 훌륭한 대답을 주셔서 감사합니다 – Qqbt