score:1

Accepted answer

you can define a method, and call it during the projection.

note: changed assessment.assessment property to assessment.assessmentdescription so the property name would not be the same as the enclosing type

public list<summaryreport> createreport()
{
 return get()
     .selectmany(rev => rev.assessments, (rev, ass) => new { rev, ass })
     .select(x => new summaryreport
     {
         reviewid = x.rev.reviewid,
         reviewerid = x.ass.reviewer.reviewerid,
         assessment = x.ass.assessment,
         reviewgroupid = x.ass.reviewer.reviewgroup.reviewgroupid,
         groupassessment = derivegroupassessment(x.rev.assessments)
      })
     .tolist();
 }


private static string derivegroupassessment(ienumerable<assessment> assessments)
{
  string assessment = null;

  if (assessments.any(a => a.assessmentdescription == "big problem"))
  {
    assessment = "big problem";
  }
  else if (assessments.all(a => a.assessmentdescription == "no problem"))
  {
    assessment = "no problem";
  }

  // if you want the value to be null if neither of the above conditions are met, this logic is not needed
  ////if (!assessments.any(a => a.assessmentdescription == "big problem")
  ////    && assessments.any(a => a.assessmentdescription == string.empty))
  ////{
  ////  assessment = null;
  ////}

  return assessment;
}

score:1

try,

 public static list<summaryreport> createreport()
    {
        return get()
            .selectmany(rev => rev.assessments, (rev, ass) => new { rev, ass })
            .select(x => new summaryreport
            {
                reviewid = x.rev.reviewid,
                reviewerid = x.ass.reviewer.reviewerid,
                assessment = x.ass.assessmentstr,
                reviewgroupid = x.ass.reviewer.reviewgroup.reviewgroupid,
                groupassessment = x.rev.assessments.any(a => a.assessmentstr == "big problem") ? "big problem" : 
                x.rev.assessments.all(a => a.assessmentstr == "no problem")? "no problem" : null
            })
            .tolist();
    }

changed name of assessment property to assessmentstr because c# not allow property name same as class name.


Related Query

More Query from same tag