Example #1
0
        public void CalcAndSetFinalAssessment()
        {
            //alternativeId, points
            ProjectAssessment result = new ProjectAssessment()
            {
                Items = new List <ProjectAssessmentItem>()
            };

            foreach (var alternative in Alternatives)
            {
                var alternativeAssessments = Assessments
                                             .SelectMany(x => x.Items).Where(item => item.AlternativeId == alternative.AlternativeId)
                                             .ToDictionary(x => new { x.ExpertId, x.FactorId }, x => x.Points.Value).OrderBy(x => x.Key.ExpertId).ThenBy(x => x.Key.FactorId);

                List <decimal> levels = GetLevels();
                Dictionary <decimal, decimal[]> levelPoints = new Dictionary <decimal, decimal[]>();

                for (int i = 0; i < levels.Count; i++)
                {
                    var level = levels[i];
                    levelPoints.Add(level, new decimal[Factors.Count]);

                    for (int j = 0; j < Factors.Count; j++)
                    {
                        var            factor = Factors[j];
                        List <decimal> expertPointsForDecision = new List <decimal>();
                        foreach (var expert in Experts)
                        {
                            expertPointsForDecision.Add(alternativeAssessments.Single(x => x.Key.ExpertId == expert.UserId && x.Key.FactorId == factor.FactorId).Value);
                        }

                        var aggregatedDecisionForLevel = expertPointsForDecision.Where(x => x >= level).Count();
                        levelPoints[level][j] = aggregatedDecisionForLevel;
                    }
                }

                for (int i = 0; i < Factors.Count; i++)
                {
                    result.Items.Add(new ProjectAssessmentItem()
                    {
                        AlternativeId = alternative.AlternativeId,
                        FactorId      = Factors[i].FactorId,
                        Points        = levelPoints.Select(x => x.Value[i] / Experts.Count).Average()
                    });
                }
            }
            this.FinalAssessment = result;
        }
Example #2
0
        public void CalcAndSetFinalAssessment()
        {
            //alternativeId, points
            ProjectAssessment result = new ProjectAssessment()
            {
                Items = new List<ProjectAssessmentItem>()
            };
            foreach (var alternative in Alternatives)
            {
                var alternativeAssessments = Assessments
                    .SelectMany(x => x.Items).Where(item => item.AlternativeId == alternative.AlternativeId)
                    .ToDictionary(x => new { x.ExpertId, x.FactorId }, x => x.Points.Value).OrderBy(x => x.Key.ExpertId).ThenBy(x => x.Key.FactorId);

                List<decimal> levels = GetLevels();
                Dictionary<decimal, decimal[]> levelPoints = new Dictionary<decimal, decimal[]>();

                for (int i = 0; i < levels.Count; i++)
                {
                    var level = levels[i];
                    levelPoints.Add(level, new decimal[Factors.Count]);

                    for (int j = 0; j < Factors.Count; j++)
                    {
                        var factor = Factors[j];
                        List<decimal> expertPointsForDecision = new List<decimal>();
                        foreach (var expert in Experts)
                        {
                            expertPointsForDecision.Add(alternativeAssessments.Single(x => x.Key.ExpertId == expert.UserId && x.Key.FactorId == factor.FactorId).Value);
                        }

                        var aggregatedDecisionForLevel = expertPointsForDecision.Where(x => x >= level).Count();
                        levelPoints[level][j] = aggregatedDecisionForLevel;
                    }
                }

                for (int i = 0; i < Factors.Count; i++)
                {
                    result.Items.Add(new ProjectAssessmentItem()
                    {
                        AlternativeId = alternative.AlternativeId,
                        FactorId = Factors[i].FactorId,
                        Points = levelPoints.Select(x => x.Value[i] / Experts.Count).Average()
                    });
                }
            }
            this.FinalAssessment = result;
        }