我正在构建一个执行以下操作的Linq查询:
- 遍历每组
- 检查组中是否至少包含一名患有
University= OPQ
的学生 - 确保同一组没有任何
Student= Adam
- 获取每组具有
University= OPQ
的学生中的第一个项目
输出
Emity
(第2组(White
(第5组(
我尝试了什么
var results = StudentsList
.GroupBy(x => x.GroupID)
.Where(x=>x.Any(y=> y.University=="OPQ") && x.Any(y=> y.Student!="Adam" ))
.Select(g =>
{
var firstItem = g.Where(x=>x.University=="OPQ");
firstItem.IsQualified = true;
return firstItem;
}).ToList();
foreach(var item in results)
Console.WriteLine("Group:" + item.GroupID + " Student:" + item.Student + " IsQualified:" + item.IsQualified);
我得到一个错误:
编译错误(第56行,第22列(:"System.Collections.Generic.IEnumerable"不包含"IsQualified"的定义,但没有扩展方法"IsQualified"接受类型的第一个参数"System.Collections.Generic.IEnumerable"可以是已找到(您是否缺少using指令或程序集引用?(
我的代码
List<StudentInfo> StudentsList = new List<StudentInfo>();
// Group 1
StudentsList.Add( new StudentInfo { Student="Gungun", University="cdf", GroupID = 1, IsQualified=false});
StudentsList.Add( new StudentInfo { Student="John", University="abc", GroupID = 1, IsQualified=false});
StudentsList.Add( new StudentInfo { Student="Jack", University="def", GroupID = 1, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Peter", University="abc", GroupID = 1, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Lemity", University="abc", GroupID = 1, IsQualified=false} );
// Group 2
StudentsList.Add( new StudentInfo { Student="Donald", University="def", GroupID = 2, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Olivia", University="ggh", GroupID = 2, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Emity", University="OPQ", GroupID = 2, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Emma", University="OPQ", GroupID = 2, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Alan", University="OPQ", GroupID = 2, IsQualified=false} );
// Group 3
StudentsList.Add( new StudentInfo { Student="Adam", University="yub", GroupID = 3, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Jacob", University="OPQ", GroupID = 3, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Matthew", University="OPQ", GroupID = 3, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Saint", University="abc", GroupID = 3, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Joshua", University="qer", GroupID = 3, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Aubrey", University="fef", GroupID = 3, IsQualified=false} );
// Group 4
StudentsList.Add( new StudentInfo { Student="Caleb", University="DEF", GroupID = 4, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Anna", University="ABC", GroupID = 4, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Chill", University="GHI", GroupID = 4, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Alexis", University="JKL", GroupID = 4, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="Zoe", University="MNO", GroupID = 4, IsQualified=false} );
// Group 5
StudentsList.Add( new StudentInfo { Student="Dylan", University="PQR", GroupID = 5, IsQualified=false} );
StudentsList.Add( new StudentInfo { Student="White", University="OPQ", GroupID = 5, IsQualified=false} );
public class StudentInfo
{
public string Student { get; set; }
public string University { get; set; }
public int GroupID { get; set; }
public bool IsQualified {get; set;}
}
在dotnet fiddle 上的演示
首先,您应该确保该组不包含任何Student == "Adam"
其次,您应该确保该组至少包含一个University == "OPQ"
最后,用University == "OPQ"
获取每组的第一个项目
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();
您的错误
x.Any(y=> y.Student!="Adam" )
应为!x.Any(y => y.Student =="Adam" )
var firstItem = g.Where(x=>x.University=="OPQ");
应为var firstItem = g.First(x=>x.University=="OPQ")