2012-10-24 2 views
2

나는 이것이 바보 같은 질문이라고 확신하지만 대답을 찾았습니다. userId를, 이름과 주문 ID :일대 다 관계에 대한 람다 식

나는 테이블

  1. 고객은 세 개의 열이 포함되어 있습니다.
  2. 주문에는 orderId, userId, price라는 세 개의 열이 있습니다.

테이블 간의 관계는 하나의 고객 주문입니다.

특정 사용자의 주문 가격을 합산하고자합니다. 다음과 같이 표시되어야합니다.

double totalPrice = currentUser.Orders.Sum(x=>x.price); 

이것은 작동하지 않습니다. 이 작업을 수행하는 올바른 방법은 무엇입니까? 감사.

+0

어떤 언어 및 어떤 ORM입니까? –

+0

'작동하지 않습니다'- totalPrice의 오류 또는 값이 예상 한 값과 다릅니다. – glosrob

답변

0
decimal totalPrice = users.SelectMany(user => user.Orders) 
         .Sum(order => (decimal?)order.Price) ?? 0; 

또는

decimal totalPrice = (from user in users 
        from order in user.Orders 
        select (decimal?)order.Price).Sum() ?? 0; 

UPDATE :

그것은 이진 부동 소수점 형의 금융 값을 나타냅니다 double를 사용 부적절합니다. product.Pricedecimal?으로 변환하면 (에가 (HasValue를 통해 결정이있는 경우) 따라서 null 허용 진수 실제 값을 얻기 위해 Value 속성을 사용할 필요

+0

왜 필요한지 설명 할 가치가 있습니다. 이는 주문에 레코드가 없으면 (사용자에게 적용) 합계의 결과가 null이므로 double이 필요할 경우 캐스팅 예외가 발생하기 때문입니다. –

+0

필자는 'decimal?'을 사용하는 이유에 대한 설명이있는 개정판을 작성했습니다. 이는 해당 항목에 null 주문 가격이있는 경우 캐스팅 예외가 없도록 nullable 십진수임을 나타냅니다. – chridam

0

나는 당신이 당신의 엔티티 객체에서 사용자를 선택해야한다고 생각이 있음을 나타냅니다 이 경우 userId = 1)

  int i= users.Single(x => x.UserID== 1).Orders.Sum(x => x.Price); 
관련 문제