2016-04-22 10 views
-1

次のLINQクエリがあります。着信する値がNULLであることを確認するには、?(例:<decimal?>)を使用します。これにより、値がnullの場合でもクエリを続行できます。しかし、null値を返す代わりに、どうすれば0を返すことができますか?私はこれらの値を自分のコードで使っていますが、それがヌルならエラーを投げます。LINQ Null Return 0

var query = referenceDt.AsEnumerable() 
    .Where(results => comp(results.Field<decimal?>("OFR_Percent"), ofrPercent) && 
         results.Field<int?>("ComputeEmptyNodeCount") <= nodeCount) 
    .OrderBy(results => results.Field<string>("Cluster")) 
    .Select(results => new 
    { 
     ServerGroup= results.Field<string>("Cluster"), 
     OOS_Percent = results.Field<decimal?>("OOS_Percent"), 
     OutOfServiceCores = results.Field<int?>("OutOfServiceCores"), 
     OFR_Percent = results.Field<decimal>("OFR_Percent"), 
     OFR_Count = results.Field<int>("OutForRepairNodeCount"), 
     RawTotalNodes = results.Field<int>("RawTotalNodes") 
    }); 
+6

'results.Field (" OutOfServiceCores ")?? 0 'など – Rob

答えて

3

null-coalescing operator(??)演算子を使用できます。左のオペランドがNULLでない場合はそれを返し、そうでない場合は右のオペランドを返します。

.Select(results => new 
{ 
    ServerGroup= results.Field<string>("Cluster") ?? "", 
    OOS_Percent = results.Field<decimal?>("OOS_Percent")?? 0, 
    OutOfServiceCores = results.Field<int?>("OutOfServiceCores") ?? 0, 
    OFR_Percent = results.Field<decimal>("OFR_Percent"), 
    OFR_Count = results.Field<int>("OutForRepairNodeCount"), 
    RawTotalNodes = results.Field<int>("RawTotalNodes") 
});