class Student{ public int StudentID { get; set; } public String StudentName { get; set; } public int Age { get; set; } }class Program{ static void Main(string[] args) { Student[] studentArray = { new Student() { StudentID = 1, StudentName = "John", Age = 18 }, new Student() { StudentID = 2, StudentName = "Steve", Age = 21 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 4, StudentName = "Ram" , Age = 20(第二问第三问为21) }, new Student() { StudentID = 5, StudentName = "Ron" , Age = 31 }, new Student() { StudentID = 6, StudentName = "Chris", Age = 17 }, new Student() { StudentID = 7, StudentName = "Rob",Age = 19 }, }; //待补全... } } 补全代码,通过LINQ实现如下功能: (1)筛选数组studentArray,筛选条件是名字中包含‘o'的学生信息,并且年龄大于20,将满足条件的学生信息输出到命令
对于本题,可以使用Where来查询特定条件,.Contains("")代表了对双引号内部字符串进行模糊匹配,或使用布尔函数对string类型进行遍历搜索该字符串是否含有”o“,代码如下所示。
var list = studentArray.Where((s) => s.Age > 20 && s.StudentName.Contains("o"));
foreach(var temp in list)
{
Console.WriteLine("{0} {1} {2}", temp.StudentID, temp.StudentName, temp.Age);
}
(2)将数组studentArray排序,要求根据年龄排序,如果年龄相同,根据StudentID排序,将排序后的学生信息输出到命令行
对于本题,可以利用OrderBy来进行第一重年龄判断,如果年龄相等则使用ThenBy来进行第二重学生ID判断,代码如下所示。
var list1 = studentArray.OrderBy((s) => s.Age).ThenBy((s) => s.StudentID);
foreach (var temp in list1)
{
Console.WriteLine("{0} {1} {2}", temp.StudentID, temp.StudentName, temp.Age);
}
(3)根据SudentID进行分组,输出SudengtId分别为奇数/偶数的学生信息
对于本题,可以使用Join方法将两个集合进行指定键合并来判断奇偶,先创建一个集合,包括奇偶判断部分--ID和奇偶输出部分--RewardName。
class JISHU
{
public int ID { get; set; }
public String RewardName { get; set; }
}
之后为该集合插入数据,用来之后的ID奇偶判断。
JISHU[] jishu ={
new JISHU(){ ID=1,RewardName="奇数"},
new JISHU(){ ID=0,RewardName="偶数"},
};
之后使用Join方法,要进行合并的接口键分别为Student集合的StudentID和JISHU集合的ID,对StudentID对2取余在和ID进行比较,即1为奇数,0为偶数,此时如果二者相等则对二者进行连接。
var list2 = studentArray.Join(jishu, p => p.StudentID%2, r => r.ID, (p, r) => new { pList=p,rList=r});
foreach (var temp in list2)
{
Console.WriteLine("{0} {1} {2} {3}", temp.pList.StudentID, temp.pList.StudentName, temp.pList.Age, temp.rList.RewardName);
}
(4)输出sudengtArray信息,要求不输出SudengtID字段,输出SudengtName和Age,其中SudengtName要求根据Gender增加Mr. 和Ms. 前缀 。
class Student{ public int StudentID { get; set; } public String StudentName { get; set; } public int Age { get; set; } public String Gender { get; set; } }class Program{ static void Main(string[] args) { Student[] studentArray = { new Student() { StudentID = 1, StudentName = "John", Age = 18, Gender = "Male" }, new Student() { StudentID = 2, StudentName = "Steve", Age = 21, Gender = "Male" }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25, Gender = "Male" }, new Student() { StudentID = 4, StudentName = "Ram" , Age = 21, Gender = "Male" }, new Student() { StudentID = 5, StudentName = "Ron" , Age = 31, Gender = "Female" }, new Student() { StudentID = 6, StudentName = "Chris", Age = 17, Gender = "Female" }, new Student() { StudentID = 7, StudentName = "Rob",Age = 19, Gender = "Male" }, }; //待补全... } }
对于本题,我们依然可以使用Contain进行模糊匹配,代码如下。
var list3 = studentArray.Where((s) => s.Gender.Contains("Male"));
foreach (var temp in list3)
{
Console.WriteLine("{0} Mr.{1} {2}", temp.StudentID, temp.StudentName, temp.Age);
}
Console.WriteLine();
var list4 = studentArray.Where((s) => s.Gender.Contains("Female"));
foreach (var temp in list4)
{
Console.WriteLine("{0} Ms.{1} {2}", temp.StudentID, temp.StudentName, temp.Age);
}
输出截图: