我觉得自己像个踢屁股比赛的独腿男人.我需要添加一个属性到我的LINQ数据集,它提供一个基于子集合属性的摘要,然后扁平我的数据。(我正在创建一个.rdlc数据集。)我终于想出了如何平平我的数据,但我不知道如何根据哪一组评审员提供他们的评估来得出一个值。
我有一些评估,我需要根据审查员所属的审查小组总结一项成果:
发布于 2012-09-20 18:08:30
您可以定义一个方法,并在投影期间调用它。
注意:将Assessment.Assessment属性更改为Assessment.AssessmentDescription,因此属性名称将与封闭类型不同。
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;
}发布于 2012-09-20 18:16:46
试试看
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();
}将评估属性的名称更改为AssessmentStr,因为C#不允许属性名与类名相同。
https://stackoverflow.com/questions/12517984
复制相似问题