C#LINQ忽略数据表中的空值

时间:2011-03-28 12:43:41

标签: c# linq

我有一个数据表,我按如下方式分组:

var result = from data in view.AsEnumerable()
                     group data by new {Group = data.Field<string>("group_no")}
                     into grp
                     select new
                     {
                         Group = grp.Key.Group,
                         PRAS = grp.Average(c => Convert.ToDouble(c.Field<string>("pAKT Total")))

                     };

现在,平均函数还计算其计算中的空单元格。例如,有10个单元格,只有5个填充了值。我希望平均值是5个值除以5的总和。

我如何确保它符合我的要求?

感谢。

2 个答案:

答案 0 :(得分:6)

也许是这样的:

PRAS = grp.Select(row => row.Field<string>("pAKT Total"))
          .Where(s => !String.IsNullOrEmpty(s))
          .Select(Convert.ToDouble)
          .Average()

答案 1 :(得分:0)

据我所知,使用Average方法是不可能的 但是,您可以使用以下替代方法获得您想要的结果:

PRAS = grp.Sum(c => Convert.ToDouble(c.Field<string>("pAKT Total"))) / grp.Count(c => !c.IsDBNull)

这只是有意义的,当你想选择&#34;空&#34;组中的行,但不想将它们包含在您的平均值中。如果你不需要&#34;空&#34;行,根本不要选择它们,即添加一个排除它们的where子句。