如果max field为空,如何将值设置为0

时间:2016-05-23 14:48:10

标签: c# linq max

我需要在linq中使用Max方法,但如果max字段值为空,我需要显示0。到目前为止我有这个代码:

var groupedData = 
      from b in showit.AsEnumerable()
      orderby b.Field<int>("Key")
      group b by b.Field<int?>("Key") into g
      select new
      {
          KeyName = g.Key,
          date = g.First().Field<string>("date"),
          Team = g.First().Field<string>("Team"),
          Calls_Chats_Answered = g.Sum(b => b.Field<int?>("Calls_Chats_Answered")),

...这里我需要达到最大值并且如果找不到最大值则设置为0:

Max_answering_delay = g.Max(b => b.Field<int?>("Max_answering_delay")),
Max_abandoning_delay= g.Max(b => b.Field<int?>("Max_abandoning_delay")),
};

2 个答案:

答案 0 :(得分:2)

您可以在nullable int上使用GetValueOrDefault,默认值为0.(假设您只有正值)。如果它们都没有任何值,那么答案就是0.像这样的东西

Max_answering_delay = g.Max(b => b.Field<int?>("Max_answering_delay").GetValueOrDefault(0))

答案 1 :(得分:0)

如果DefaultIfEmpty为空,您可以使用0获取包含默认(g)值的可枚举值:

Max_answering_delay = g.Select(b => b.Field<int>("Max_answering_delay")).DefaultIfEmpty().Max(),
Max_abandoning_delay= g.Select(b => b.Field<int>("Max_abandoning_delay")).DefaultIfEmpty().Max(),