【发布时间】:2020-02-18 11:27:40
【问题描述】:
我有一个 Linq 查询,可以像这样更新每个条件组中的第一项
var results = StudentsList.GroupBy(x => x.GroupID)
.Where(g => !g.Any(p => p.Student == "Adam") && g.Any(x => x.University == "OPQ"))
.Select(g =>
{
var firstItem = g.First(x => x.University == "OPQ");
firstItem.IsQualified = true;
return firstItem;
}).ToList();
在保留原有功能的同时,我想另外-
- 如果存在,请使用
University!= "OPQ"和Course= "HR"(第2 组)为同一组中的所有学生更新IsQualified= true。如果不存在,则忽略(第 5 组)
输出
- Donald、Silver、Emity(所有第 2 组)和 White(第 5 组)。
我尝试了什么
在"firstItem.IsQualified = true;" 行下方,我添加了-
var otherItems=g.Any(x=>x.University != "OPQ" && x.Course =="HR");
otherItems.IsQualified= true;
我的代码
List<StudentInfo> StudentsList = new List<StudentInfo>();
// Group 1
StudentsList.Add( new StudentInfo { Student="Gungun", University="cdf", Course="GD", GroupID = 1, IsQualified=false});
StudentsList.Add( new StudentInfo { Student="John", University="abc", Course="ACC", GroupID = 1, IsQualified=false});
StudentsList.Add( new StudentInfo { Student="Jack", University="def", Course="CS", GroupID = 1, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Peter", University="abc", Course="GD", GroupID = 1, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Lemity", University="abc", Course="CS", GroupID = 1, IsQualified=false} );
// Group 2
StudentsList.Add( new StudentInfo { Student="Donald", University="def", Course="HR",GroupID = 2, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Olivia", University="ggh", Course="RC",GroupID = 2, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Silver", University="tcs", Course="HR",GroupID = 2, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Carl", University="yyz", Course="AC",GroupID = 2, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Emity", University="OPQ", Course="AC",GroupID = 2, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Emma", University="OPQ", Course="GD", GroupID = 2, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Alan", University="OPQ", Course="GD", GroupID = 2, IsQualified=false} );
// Group 3
StudentsList.Add( new StudentInfo { Student="Adam", University="yub", Course="CS", GroupID = 3, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Jacob", University="OPQ", Course="AC",GroupID = 3, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Matthew", University="OPQ", Course="HR", GroupID = 3, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Saint", University="abc", Course="MNGT", GroupID = 3, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Joshua", University="qer", Course="MNGT", GroupID = 3, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Aubrey", University="fef", Course="MNGT", GroupID = 3, IsQualified=false} );
// Group 4
StudentsList.Add( new StudentInfo { Student="Caleb", University="DEF", Course="HR", GroupID = 4, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Anna", University="ABC", Course="HR", GroupID = 4, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Chill", University="GHI", Course="GD", GroupID = 4, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Alexis", University="JKL", Course="CS", GroupID = 4, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Zoe", University="MNO", Course="MNGT", GroupID = 4, IsQualified=false} );
// Group 5
StudentsList.Add( new StudentInfo { Student="Dylan", University="PQR", Course="ACC", GroupID = 5, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="White", University="OPQ", Course="CE", GroupID = 5, IsQualified=false} );
public class StudentInfo
{
public string Student { get; set; }
public string University { get; set; }
public string Course { get; set; }
public int GroupID { get; set; }
public bool IsQualified {get; set;}
}
【问题讨论】:
-
Course="GD", Course="ACC" -(第 13 行,第 90 列)成员“Course”的重复初始化是不言自明的。
-
抱歉标签。我已将其删除。
-
修复后,我现在得到编译错误(第 67 行,第 18 列):'bool' 不包含'IsQualified' 的定义,并且没有扩展方法'IsQualified' 接受类型的第一个参数'布尔'
-
var otherItems=g.Any(...); otherItems.IsQualified= true;- 变量otherItems具有bool类型。 bool 中没有 IsQualified 属性 -
将
Any更改为Where并在循环中更新IsQualified