从linq查询得到平均值

时间:2011-04-29 18:57:38

标签: asp.net asp.net-mvc-3

我需要从下面的linq查询得到一个平均值,但数据字段是varchar,我这样做时会出错。

var _districtResult = (from ls in SessionHandler.CurrentContext.LennoxSurveyResponses
                                   join ml in SessionHandler.CurrentContext.MailingListEntries on ls.SurveyCode equals ml.SurveyCode
                                   join m in SessionHandler.CurrentContext.MailingLists on ml.MailingListId equals m.MailingListId
                                   join ch in SessionHandler.CurrentContext.Channels on m.ChannelId equals ch.ChannelId
                                   join chg in SessionHandler.CurrentContext.ChannelGroups on ch.ChannelGroupId equals chg.ChannelGroupId
                                   join tchg in SessionHandler.CurrentContext.ChannelGroups on chg.ParentChannelGroupId equals tchg.ChannelGroupId
                                   where tchg.ParentChannelGroupId == model.LoggedChannelGroupId
                                   select ls).ToList();

ls包含Score1,Score2,Score3,Score4。所有这些都是数据库中的varchar(50)。它们也允许空值。

如果我需要获得Score1的平均值并将其传递给我的模型数据,我该怎么做?

我尝试过model.AvgScore1 = _districtResult.Select(m => m.Score1).Average()。Value。但是这样做我得到了一个错误..

1 个答案:

答案 0 :(得分:0)

你必须将(在你的例子中)m.Score1转换为数字类型(here is the MSDN documentation for the Average method。你不能对字符串数据运行数学函数。你也应该检查null。

类似的东西:

_districtResult.Select(m => string.IsNullOrEmpty(m.Score1) ? 0 : //null, use 0
                            Double.Parse(m.Score1)).Average()    //to double