15

次のようなLINQクエリがあります...

var duration = Level3Data.AsQueryable().Sum(d => d.DurationMonths);

すべてのd.DurationMonths値が null の場合、Sum は を返します0nullすべてが の場合d.DurationMonths、Sum を返すにはどうすればよいnullですか? または、合計を実行する前に、この状況を排除するために最初に別のクエリを実行する必要がありますか?

4

5 に答える 5

13

拡張メソッドの以前の提案に加えて、三項演算子を使用できます...

var duration = Level3Data.AsQueryable().Any(d => d.DurationMonths.HasValue) 
               ? Level3Data.AsQueryable().Sum(d => d.DurationMonths) 
               : null;
于 2009-08-24T13:59:50.967 に答える
6

Aggregateカスタム集計コードを提供するために使用できます。

var items = Level3Data.AsQueryable();
var duration = items.Aggregate<D,int?>(null, (s, d) => (s == null) ? d.DurationMonths : s + (d.DurationMonths ?? 0));

( のアイテムLevel3Dataのタイプが であると仮定D)

于 2009-08-24T14:11:49.237 に答える
3
var outputIndicatorSum = (from OutputIndicatorTable in objDataBaseContext.Output_Indicators
                                          where OutputIndicatorTable.Output_Id == outputId
                                          select (int?)OutputIndicatorTable.Status).Sum();
                int outputIndicatorSumReturn = Convert.ToInt32(outputIndicatorSum);
                return outputIndicatorSumReturn;

null 非許容変数を null 許容型に明示的に型キャストできます。 i.e, select (int?)OutputIndicatorTable.Status).Sum();

于 2013-05-08T13:14:57.903 に答える
1

Sum だけを使用すると、これは不可能です。質問で示したように、Sum を呼び出す前に、この状況を確認する必要があります。

var q = Level3Data.AsQueryable();
var duration = q.All(d => d.DurationMonths == null)
                   ? null
                   : q.Sum(d => d.DurationMonths);
于 2009-08-24T14:00:16.740 に答える
-1

2 つのクエリなしで結果が必要な場合は、次を試してください。

var duration = Level3Data.AsQueryable().Sum(d => (double?)d.DurationMonths);

このクエリの結果として null ではなくゼロが必要な場合は、次を使用します。

var duration = Level3Data.AsQueryable().Sum(d => (double?)d.DurationMonths) ?? 0;

于 2013-03-28T15:01:18.987 に答える