문제

이 코드가 있습니다 (좋아요, 그렇지 않지만 비슷한 점 : P)

    var dogs = Dogs.Select(ø => new Row
    {
            Name = ø.Name,
            WeightOfNiceCats = ø.Owner
              .Cats
              .Where(æ => !æ.Annoying)
              .Sum(æ => æ.Weight),
    });

여기서 나는 모든 개를 겪고 개와 같은 소유자가있는 모든 호수 고양이의 무게를 (널리킹 할 수없는 소수점으로) 요약합니다. 물론, 거의 모든 고양이가 성가 시므로이 오류가 발생합니다.

NULL 값은 유형 시스템을 가진 멤버에게 할당 할 수 없습니다.

사용 된 필드 나 외래 키는 무효 일 수 없습니다. 따라서 오류는 Where 절은 고양이를 반환하지 않으며, 종종 고양이를 반환하지 않습니다. 그러나 어떻게 이것을 해결할 수 있습니까? 그런 일이 발생하면 0이 되길 원합니다. A와 함께 시도했습니다 DefaultIfEmpty()Where 조항이지만이 오류가 발생합니다.

객체 참조 객체의 인스턴스로 설정되지 않습니다.

이해할 수있는 것 같아요. 나는 추가하려고했다 ??Sum, 그러나이 오류로 인해 컴파일하지 않습니다.

운영자 '??' '10 진수'및 '소수'유형의 오페라에 적용 할 수 없습니다.

물론 의미가 있습니다. 그래서 내가 무엇을 할 수 있니? 경우 좋을 것입니다 Sum 요약 할 것이 없을 때 방금 0이 반환되었습니다. 또는 a SumOrZero 어떤 종류의 진술. a를 만드는 것이 어려울까요 SumOrZero LINQ2SQL과 함께 작동하는 방법?

도움이 되었습니까?

해결책

이것이 제가 지금은 끝났던 것입니다.

.Sum(æ => (decimal?) æ.Weight) ?? 0.0M,

이것은 매력처럼 작동합니다.

나는 여전히 a를 선호합니다 SumOrZero 나는 사용할 수 있는데, 이것은 정규와 똑같이 작동합니다. Sum 다시는 돌아 오지 않을 것입니다 null 어떤 이유로. 다른 사람들이 언급했듯이 이것은 매우 쉽게 만들 수 있습니다. IEnumerable 그러나 조금 더 멍청하게 만들었습니다 IQueryable 따라서 Linq2SQL 등과 함께 작동합니다. 따라서 지금은 그대로 남겨 둘 것입니다. 비록 누군가가 언젠가 지루하고 글을 쓰더라도 SumOrZero ~을 위한 IQueryable 모든 숫자 유형에 대해 linq2sql과 함께 작동하는데 다음과 같이 알려주세요 : D

다른 팁

LINQ에서 개체에서는 쉬울 것입니다. LINQ에서 SQL을 사용하면 더 어려울 것입니다. 당신은 자신의 확장 방법을 쓸 수 있습니다 Queryable.Sum 정상적인 표현에서 쌓인 표현으로, 무효 유형으로 캐스트가 있습니다. 나는 당신이 할 필요가 있다고 생각합니까 ?? 전화 코드에서 0m. 다시 말해, 당신은 할 수 있습니다 :

.SumOrNull(æ => æ.Weight) ?? 0M,

.sumornull의 서명은 다음과 같습니다.

public static decimal? SumOrNull<TSource, decimal>(this IQueryable<TSource>,
    Func<TSource,decimal> projection)

기본적으로 쿼리 가능한 모든 값 유형에 대해 쓸 수 있습니다. 너 ~할 수 있었다 일반적으로 작성하고 반사를 사용하여 쿼리 가능하게 적절한 방법을 호출하지만 그다지 좋을 것입니다.

나는 당신이 당신이 가진 것, 정직한 것에 가장 적합하다고 생각합니다.

이미 주어진 트릭 (.Sum(æ => (decimal?) æ.Weight) ?? 0.0M)은 데이터베이스에서 쿼리로 실행될 때이 시나리오에서 생각할 수있는 최선입니다. 약간 성가 시지만 더 나쁜 것이 있습니다 ...

LINQ-to-Objects와 달리 기본 제공 업체가 매핑해야하므로 자체 확장 방법을 추가 할 수 없습니다.

Defaultifempty를 사용하려고합니다. 이는 단일 요소 0으로 ienumberable을 반환하고 필요와 같은 의미 적으로 동일합니다.

귀중한 소수점이 있으므로 2 개의 매개 변수를 취하는 메소드의 두 번째 버전을 사용해야 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top