2017-10-17 4 views
0

회사의 창고 설명별로 그룹화 된 LINQ 쿼리가 있습니다. 이제는 그 달의 물품 무게를 합산해야했습니다. 그런데 나는 "SCRP"라는 단어가 들어있는 필드에서 발견되는 스크랩의 총 무게를 더한 또 다른 필드를 가지고 있습니다. 나는 이렇게 할 때 악명 높은 객체 참조 오류가 객체 오류의 인스턴스로 설정되지 않는다. 널 (null) 또는 무언가가 있기 때문이라고 가정합니다. 필드에 다른 값 또는 널 (null)이 들어 있습니다.null을 반환하는 데이터를 가져 오는 where 절이있는 linq의 필드를 더하는 방법은 무엇입니까?

이것은 내가 가지고있는 쿼리입니다. UserSequence 비트를 추가 할 때까지 완벽하게 실행됩니다.

P.s 스크랩 비율은 작동하지 않지만 같은 문제로 인해 발생합니다.

var fistDayofPreviousMonth = DateTime.Today.AddMonths(-4); 
var testScrapQuery = from s in mapicsSession.Query<InventoryHistory>() 
        where s.PostedTimestamp > fistDayofPreviousMonth 
        orderby s.Warehouse.Description 
        group s by s.Warehouse.Description 
        into test 
        let tw = mapicsSession.Query<InventoryHistory>() 
         .Where(x => x.Warehouse.Description == test.Key) 
         .Sum(x => x.Item.Weight) 
        let sw = mapicsSession.Query<InventoryHistory>() 
         .Where(x => x.Warehouse.Description == test.Key 
            && x.UserSequence == "SCRP") 
         .Sum(x => x.Item.Weight) 
        select new 
        { 
         Warehouse = test.Key, 
         TotalWeight = tw, 
         ScrapWeight = sw 
         //ScrapPercentage = (sw/tw) * 100 
        }; 
+0

실제 SCRP가있는 필드가 있는지 확인하기 위해 쿼리 할 때 작동하지만, 합계가되면 나누기가됩니다. –

+0

여기 내 전체 오류 : NHibernate.Exceptions.GenericADOException : 쿼리를 실행할 수 없습니다 [SQL : SQL 사용할 수 없음] ---> System.NullReferenceException : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. at lambda_method (Closure, Object []) –

답변

2

당신은 값을 병합하여 첫 번째 문제를 해결할 수 있습니다 (x 또는 x.Item가 null의 경우 지금은 값으로 0 소요) :

.Sum(x => x?.Item?.Weight ?? 0) 

또는 추가 Where로 :

.Where(x => x != null && x.Item != null) 
.Sum(x => x.Item.Weight) 

그리고 이것은 백분율 계산을 위해 할 수 있다고 생각합니다 (0으로 나눈 것을 방지하십시오) :

ScrapPercentage = tw == 0 ? 100 : (sw/tw) * 100 
+0

첫 번째 부분을 시도했지만 오류가 발생합니다. "표현 트리 람다에는 null propergating 연산자가 포함되어 있지 않을 수 있습니다." 나는 테스트 할 수 없지만 persentage 계산기가 작동 할 것처럼 보인다. –

+0

@JudithJoubert 업데이트를 참조하십시오. –