Search code examples
c#.netlinqnullable

LINQ Null Return 0


I have the following LINQ query.To check in the incoming value is null, I use ? (example: <decimal?>). This allows the query to continue even if a value is null. However, instead of returning a null value, how can I return 0? I use these values downstream in my code, and if it null, throws an error.

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")
    });

Solution

  • You can use null-coalescing operator (??) operator. It returns the left operand if it is not null, otherwise it returns the right operand.

    .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")
    });