I feel like a one legged man in an ass-kicking contest... I need to add a property to my LINQ dataset which provides a summary based on properties of a sub-collection and then flatten my data. (I'm creating an .rdlc dataset.) I finally figured out how to flatten my data, but I cannot figure out how to derive a value based on which group of reviewers provided their assessment.
I have some assessments and I need to summarize one outcome based on the Reviewer Group the Reviewer belongs to:
If any of the assessments in the review group are "Big Problem", return "Big Problem".
If All assessments say "No Problem", then return "No Problem".
If no assessments are "Big Problem" and at least one is blank, return null.
Below is a sample set I created to hopefully demonstrate what I'm talking about:
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 = "Need to derive this value!!??!?" }) .ToList(); } public List<Review> Get() { ReviewGroup GrpOne = new ReviewGroup(){ ReviewGroupID=1}; ReviewGroup GrpTwo = new ReviewGroup(){ ReviewGroupID=2}; ReviewGroup GrpThree = new ReviewGroup(){ ReviewGroupID=3}; ReviewerInfo userOne = new ReviewerInfo() { ReviewerID=1, ReviewGroup = GrpOne}; ReviewerInfo userTwo = new ReviewerInfo() { ReviewerID=2, ReviewGroup = GrpTwo}; ReviewerInfo userThree = new ReviewerInfo() { ReviewerID=3, ReviewGroup = GrpTwo}; ReviewerInfo userFour = new ReviewerInfo() { ReviewerID=4, ReviewGroup = GrpThree}; Assessment asOne = new Assessment() { AssessmentID=1, Reviewer=userOne, Assessment="Big Problem"}; Assessment asTwo = new Assessment() { AssessmentID=2, Reviewer=userTwo, Assessment="No Problem"}; Assessment asThree = new Assessment() { AssessmentID=3, Reviewer=userThree, Assessment="No Problem"}; Assessment asFour = new Assessment() { AssessmentID=4, Reviewer=userFour, Assessment=""}; Assessment asFive = new Assessment() { AssessmentID=5, Reviewer=userOne, Assessment="No Problem"}; Assessment asSix = new Assessment() { AssessmentID=6, Reviewer=userTwo, Assessment="No Problem"}; Assessment asSeven = new Assessment() { AssessmentID=7, Reviewer=userThree, Assessment="No Problem"}; Assessment asEight = new Assessment() { AssessmentID=8, Reviewer=userFour, Assessment="No Problem"}; Assessment asNine = new Assessment() { AssessmentID=9, Reviewer=userOne, Assessment="No Problem"}; Assessment asTen = new Assessment() { AssessmentID=10, Reviewer=userTwo, Assessment=""}; Assessment asEleven = new Assessment() { AssessmentID=11, Reviewer=userThree, Assessment="No Problem"}; Assessment asTwelve = new Assessment() { AssessmentID=12, Reviewer=userFour, Assessment="No Problem"}; List<Assessment> firstList = new List<Assessment>() { asOne, asTwo, asThree, asFour }; List<Assessment> secondList = new List<Assessment>() {asFive, asSix, asSeven, asEight}; List<Assessment> thirdList = new List<Assessment>() { asNine, asTen, asEleven, asTwelve }; Review revOne = new Review() { ReviewID=1, Assessments=firstList }; Review revTwo = new Review() { ReviewID=2, Assessments = secondList }; Review revThree = new Review() { ReviewID = 3, Assessments = thirdList }; List<Review> reviews = new List<Review>() { revOne, revTwo, revThree }; return reviews; } public class SummaryReport { public int ReviewID { get; set; } public int ReviewerID { get; set; } public string Assessment { get; set; } public int ReviewGroupID { get; set; } public string GroupAssessment { get; set; } } public class Review { public int ReviewID { get; set; } public virtual List<Assessment> Assessments { get; set; } public Review() { } } public class Assessment { public int AssessmentID { get; set; } public ReviewerInfo Reviewer { get; set; } public string Assessment { get; set; } } public class ReviewerInfo { public int ReviewerID { get; set; } public ReviewGroup ReviewGroup { get; set; } } public class ReviewGroup { public int ReviewGroupID { get; set; } }