2016-05-23 108 views
0

我需要在linq中使用Max方法,但如果最大字段值为空,我需要显示0代替。我到目前为止这样的代码:如何设置为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

您可以用可空INT使用GetValueOrDefault默认值为0.(假设你只有正值)。如果他们都没有任何价值,答案是0。像这样的事情

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

谢谢!像魅力一样工作! –

+0

@sammybenmenahem不客气。请问,请将其标记为答案?谢谢 – bbeda

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(), 
+0

谢谢阿图罗,虽然我没有试过你的答案,但由bbdea的第一个答案很好! 。谢谢 ! –

相关问题