2011-04-29 102 views
0

我需要從下面的linq查詢得到一個平均值,但數據字段是varchar,我在得到這個錯誤的時候出錯了。從linq查詢得到平均值

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。但我得到一個錯誤,而這樣做..

+2

如果你要問其中包含錯誤的問題,*總*說的是什麼錯誤,否則它是去看醫生,相當於和。只是說,「它傷害了」而不說*什麼*傷害。 – 2011-04-29 19:01:33

+1

**它們不應該是'VARCHAR(50)'**。這就像存儲玩具自行車在一個全尺寸的停車位。 – SLaks 2011-04-29 19:09:26

回答

0

你必須轉換(在你的例子中)m.Score1到一個數字類型(here is the MSDN documentation for the Average method。你不能運行一個數學函數的字符串數據,你也應該檢查爲空。

東西沿着這行:

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

非常感謝!我試着做_districtResult.Average(m => Convert.ToInt32(m.Score1)); – bladerunner 2011-04-29 19:30:07

+0

你有一個更好。 – bladerunner 2011-04-29 19:30:31