首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据子集合汇总属性

根据子集合汇总属性
EN

Stack Overflow用户
提问于 2012-09-20 17:45:42
回答 2查看 145关注 0票数 4

我觉得自己像个踢屁股比赛的独腿男人.我需要添加一个属性到我的LINQ数据集,它提供一个基于子集合属性的摘要,然后扁平我的数据。(我正在创建一个.rdlc数据集。)我终于想出了如何平平我的数据,但我不知道如何根据哪一组评审员提供他们的评估来得出一个值。

我有一些评估,我需要根据审查员所属的审查小组总结一项成果:

  1. 如果评审小组中的任何评估都是“大问题”,则返回“大问题”。

  1. 如果所有的评估都说“没问题”,那就返回“没问题”。

  1. 如果没有评估是“大问题”,并且至少有一个是空的,则返回null。 下面是我创建的一个示例集,希望能够演示我所讲的内容: 公共列表CreateReport() {rev Get() .SelectMany(rev => rev.Assessments,(rev,ass) => new { rev,ass }) .Select(x => new SummaryReport { ReviewID = x.rev.ReviewID,ReviewerID = x.ass.Reviewer.ReviewerID,评估= x.ass.Assessment,ReviewGroupID = x.ass.Reviewer.ReviewGroup.ReviewGroupID,GroupAssessment =“需要导出此值!!??”} .ToList();} public List Get() { ReviewGroup GrpOne =新ReviewGroup(){ ReviewGroupID=1};ReviewGroup GrpTwo =新ReviewGroup(){ ReviewGroupID=2};ReviewGroup GrpThree =新ReviewGroup(){ ReviewGroupID=3};ReviewerInfo userOne = new ReviewerInfo() { ReviewerID=1,ReviewGroup = GrpOne};ReviewerInfo =新(){,=};en25#=新(){,=};en31#=新(){,#en34=};asOne =新评估(){ AssessmentID=1,Reviewer=userOne,Assessment=“大问题”};评估asTwo =新评估(){ AssessmentID=2,Reviewer=userTwo,Assessment=“无问题”};评估asThree =新评估(){ AssessmentID=3,Reviewer=userThree,Assessment=“无问题”};评估asFour =新评估(){ AssessmentID=4,Reviewer=userFour,Assessment=“};评估asTwo=新评估(){AssessmentID=4,Reviewer=userFour,”无问题“};评估asThree=新评估(){,,”无问题“};asSeven =新评估(){ AssessmentID=7,Reviewer=userThree,Assessment=“无问题”};评估asEight =新评估(){ AssessmentID=8,Reviewer=userFour,Assessment=“无问题”};评估asNine =新评估(){ AssessmentID=9,Reviewer=userOne,Assessment=“无问题”};评估asTen =新评估(){ AssessmentID=10,Reviewer=userTwo,Assessment=“};评估asEight=新评估(){AssessmentID=10,Reviewer=userTwo,”无问题“};评估asNine=新评估(){,,”无问题“};List firstList = new List() { asOne,asTwo,asThree,asFour };List secondList =新List() {asFive,asSix,asSeven,asEight};List thirdList =新List() { asNine,asTen,asEleven,asTwelve };Review revOne =新评论(){ ReviewID=1,Assessments=firstList };Review secondList =新的审查(){,asThree= };审查=新的审查(){= 3,评估= };List Review =新列表(){ revOne,revTwo,revThree };返回评论;}公共类SummaryReport { public int ReviewID { get;set;} public int ReviewerID { get;set;}公共字符串评估{ get;set;} public int ReviewGroupID { get;set;}公共字符串GroupAssessment { get;}}公共类评审{ public int ReviewID { get;set;} public虚拟列表评估{ get;set;公共审查()}公共类评估{ public int AssessmentID { get;set;}公共ReviewerInfo审查员{ get;set;}公共字符串评估{ get;set;}公共类ReviewerInfo { public int ReviewerID { get;set;} public ReviewGroup ReviewGroup { get;set;}公共类ReviewGroup { public int ReviewGroupID { get;set;}}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-20 18:08:30

您可以定义一个方法,并在投影期间调用它。

注意:将Assessment.Assessment属性更改为Assessment.AssessmentDescription,因此属性名称将与封闭类型不同。

代码语言:javascript
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2012-09-20 18:16:46

试试看

代码语言:javascript
复制
 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#不允许属性名与类名相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12517984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档