当我尝试运行报告时,出现了错误。问题出在这里:model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : Double.Parse(m.Question1)).Average());
public class SummaryDetails
{
public int ChannelId { get; set; }
public int ChannelGroupId { get; set; }
public string Question1 { get; set; }
public string Question2 { get; set; }
public string Question3 { get; set; }
public string Question4 { get; set; }
public int OrganizationId { get; set; }
}
public ActionResult AreaManager(AreaManagerModel model)
{
model.ShowCustomerReport = false;
model.ShowSurveyReport = true;
LoadModelVariablesonPostBack(model, 8);
var _newSurveyResult = (
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 cg in SessionHandler.CurrentContext.ChannelGroups on ch.ChannelGroupId equals cg.ChannelGroupId
join dcg in SessionHandler.CurrentContext.ChannelGroups on cg.ParentChannelGroupId equals dcg.ChannelGroupId
join ncg in SessionHandler.CurrentContext.ChannelGroups on dcg.ParentChannelGroupId equals ncg.ChannelGroupId
join pcg in SessionHandler.CurrentContext.ChannelGroups on ncg.ParentChannelGroupId equals pcg.ChannelGroupId
select new SummaryDetails {
OrganizationId = ch.OrganizationId,
Question1 = ls.Question1Answer,
Question2 = ls.Question2Answer,
Question3 = ls.Question3Answer,
Question4 = ls.Question4Answer,
ChannelId = ch.ChannelId,
ChannelGroupId = model.TMId != 0 ? cg.ChannelGroupId : model.DistrictId != 0 ? dcg.ChannelGroupId : model.AreaId != 0 ? ncg.ChannelGroupId : model.NationId != 0 ? pcg.ChannelGroupId : model.AreaId == 0 ? ncg.ChannelGroupId : model.DistrictId == 0 ? dcg.ChannelGroupId : cg.ChannelGroupId
}
);
var _newSentSurveys = (
from ml in SessionHandler.CurrentContext.MailingListEntries
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 cg in SessionHandler.CurrentContext.ChannelGroups on ch.ChannelGroupId equals cg.ChannelGroupId
join dcg in SessionHandler.CurrentContext.ChannelGroups on cg.ParentChannelGroupId equals dcg.ChannelGroupId
join ncg in SessionHandler.CurrentContext.ChannelGroups on dcg.ParentChannelGroupId equals ncg.ChannelGroupId
join pcg in SessionHandler.CurrentContext.ChannelGroups on ncg.ParentChannelGroupId equals pcg.ChannelGroupId
where (ml.EmailDate != null || ml.LetterDate != null || ml.EmailBounce == null)
select new SummaryDetails
{
OrganizationId = ch.OrganizationId,
ChannelId = ch.ChannelId,
ChannelGroupId = model.TMId != 0 ? cg.ChannelGroupId : model.DistrictId != 0 ? dcg.ChannelGroupId : model.AreaId != 0 ? ncg.ChannelGroupId : model.NationId != 0 ? pcg.ChannelGroupId : model.AreaId == 0 ? ncg.ChannelGroupId : model.DistrictId == 0 ? dcg.ChannelGroupId : cg.ChannelGroupId
}
);
if (model.ChannelId != 0)
{
_newSurveyResult = _newSurveyResult.Where(p => p.ChannelId == model.ChannelId);
_newSentSurveys = _newSentSurveys.Where(p => p.ChannelId == model.ChannelId);
}
else if (model.TMId != 0)
{
_newSurveyResult = _newSurveyResult.Where(p => p.ChannelGroupId == model.TMId);
_newSentSurveys = _newSentSurveys.Where(p => p.ChannelGroupId == model.TMId);
}
else if (model.DistrictId != 0)
{
_newSurveyResult = _newSurveyResult.Where(p => p.ChannelGroupId == model.DistrictId);
_newSentSurveys = _newSentSurveys.Where(p => p.ChannelGroupId == model.DistrictId);
}
else if (model.AreaId != 0)
{
_newSurveyResult = _newSurveyResult.Where(p => p.ChannelGroupId == model.AreaId);
_newSentSurveys = _newSentSurveys.Where(p => p.ChannelGroupId == model.AreaId);
}
else if (model.NationId != 0)
{
_newSurveyResult = _newSurveyResult.Where(p => p.ChannelGroupId == model.NationId);
_newSentSurveys = _newSentSurveys.Where(p => p.ChannelGroupId == model.NationId);
}
else if (model.NationId == 0)
{
_newSurveyResult = _newSurveyResult.Where(p => p.OrganizationId == 8);
_newSentSurveys = _newSentSurveys.Where(p => p.OrganizationId == 8);
}
else if (model.AreaId == 0)
{
_newSurveyResult = _newSurveyResult.Where(p => p.ChannelGroupId == model.LoggedChannelGroupId);
_newSentSurveys = _newSentSurveys.Where(p => p.ChannelGroupId == model.LoggedChannelGroupId);
}
else if (model.DistrictId == 0)
{
_newSurveyResult = _newSurveyResult.Where(p => p.ChannelGroupId == model.LoggedChannelGroupId);
_newSentSurveys = _newSentSurveys.Where(p => p.ChannelGroupId == model.LoggedChannelGroupId);
}
else if (model.TMId == 0)
{
_newSurveyResult = _newSurveyResult.Where(p => p.ChannelGroupId == model.LoggedChannelGroupId);
_newSentSurveys = _newSentSurveys.Where(p => p.ChannelGroupId == model.LoggedChannelGroupId);
}
model.SentSurveys = _newSentSurveys.Count() > 0 ? _newSentSurveys.Count() : 0;
model.CompletedSurveys = _newSurveyResult.Count() > 0 ? _newSurveyResult.Count() : 0;
model.PercentageComplete = model.SentSurveys != 0 ? (Convert.ToDouble(model.CompletedSurveys) / Convert.ToDouble(model.SentSurveys)) : 0;
if (_newSurveyResult.Count() > 0)
{
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : Double.Parse(m.Question1)).Average());
model.ServicePerformance = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question2) ? 0 : Double.Parse(m.Question2)).Average());
model.InstallPerformance = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question3) ? 0 : Double.Parse(m.Question3)).Average());
model.ReferringLennox = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question4) ? 0 : Double.Parse(m.Question4)).Average());
double overAllScore = CalculateOverallScore(
_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : Double.Parse(m.Question1)).Sum(),
_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question2) ? 0 : Double.Parse(m.Question2)).Sum(),
_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question3) ? 0 : Double.Parse(m.Question3)).Sum(),
_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question4) ? 0 : Double.Parse(m.Question4)).Sum(),
_newSurveyResult.Count());
model.OverallScore = Math.Round(overAllScore);
}
}
DbFunction
不必在对象/数据库上下文上定义。它可以在任何地方定义。我已经使用静态类进行了测试,使我能够将其定义为扩展方法。(对于我的需求:public static int? ToInt(this string stringValue)
。) - Frédéric