...选课表”等三个数据表,表结构如下: 学生表:学号(C,6),姓

发布网友

我来回答

2个回答

热心网友

用LINQ(语言集成查询)完成你说的这些任务很方便,具体的细节问题还得你自己做。下面举出两个例子供你参考,这两个例子用数组代替数据库,对数据库也可用同样的方法。
例1,用bool值作关键字区分两组的结果,注意group子句中的表达式产生的结果。
public class Student
{
public string Name { get; set; }
public int ID { get; set; }
public List<int> Scores;
}
public static List<Student> GetStudents()
{
//实例化数据源,注意各成员内部成绩序列的初始化
List<Student> students = new List<Student>
{
new Student {Name="张勇", ID=1, Scores= new List<int> {97, 72, 81, 60}},
new Student {Name="王磊", ID=2 Scores= new List<int> {75, 84, 91, 39}},
new Student {Name="孙敏", ID=3, Scores= new List<int> {88, 94, 65, 85}},
new Student {Name="刘晓", ID=4, Scores= new List<int> {97, , 85, 82}},
new Student {Name="扬帆", ID=5, Scores= new List<int> {35, 72, 91, 70}}
};
return students;
}
static void Main()
{
List<Student> students = GetStudents();
//用true或false分组,查询变量是IEnumerable<IGrouping<bool, Student>>类型
var booleanGroupQuery = from student in students
group student by student.Scores.Average() >= 80;
foreach (var studentGroup in booleanGroupQuery)
{
Console.WriteLine(studentGroup.Key == true ? "平均分高于80" : "平均分低于80");
foreach (var student in studentGroup)
Console.WriteLine("{0,4} {1} {2}", student.ID, student.Name, student.Scores.Average());
}
}
输出:
平均分低于80
1 张勇 77.5
2 王磊 72.25
5 扬帆 67
平均分高于80
3 孙敏 83
4 刘晓 88.25
例2,查询人名先排序再分组,可以用姓作为分组关键字。
string[] Name = {"张明","刘新","王宏","刘洋","张媛","张宝","王金贵","刘东","王凯","刘芳"};
var sortedGroups = from name in Name
orderby name
group name by name[0] into newGroup
select newGroup;
foreach (var nameGroup in sortedGroups)
{
Console.WriteLine(nameGroup.Key);
foreach (var name in nameGroup)
Console.WriteLine(" "+name);
}
输出:

刘东 刘芳 刘新 刘洋

王宏 王金贵 王凯

张宝 张明 张媛
输出结果按姓分类,组内排序。
《C#编程指南》(清华大学出版社2011年1月出版,可网购)第5章和第17章专门讨论LINQ查询更新数据库。

热心网友

问什么

热心网友

用LINQ(语言集成查询)完成你说的这些任务很方便,具体的细节问题还得你自己做。下面举出两个例子供你参考,这两个例子用数组代替数据库,对数据库也可用同样的方法。
例1,用bool值作关键字区分两组的结果,注意group子句中的表达式产生的结果。
public class Student
{
public string Name { get; set; }
public int ID { get; set; }
public List<int> Scores;
}
public static List<Student> GetStudents()
{
//实例化数据源,注意各成员内部成绩序列的初始化
List<Student> students = new List<Student>
{
new Student {Name="张勇", ID=1, Scores= new List<int> {97, 72, 81, 60}},
new Student {Name="王磊", ID=2 Scores= new List<int> {75, 84, 91, 39}},
new Student {Name="孙敏", ID=3, Scores= new List<int> {88, 94, 65, 85}},
new Student {Name="刘晓", ID=4, Scores= new List<int> {97, , 85, 82}},
new Student {Name="扬帆", ID=5, Scores= new List<int> {35, 72, 91, 70}}
};
return students;
}
static void Main()
{
List<Student> students = GetStudents();
//用true或false分组,查询变量是IEnumerable<IGrouping<bool, Student>>类型
var booleanGroupQuery = from student in students
group student by student.Scores.Average() >= 80;
foreach (var studentGroup in booleanGroupQuery)
{
Console.WriteLine(studentGroup.Key == true ? "平均分高于80" : "平均分低于80");
foreach (var student in studentGroup)
Console.WriteLine("{0,4} {1} {2}", student.ID, student.Name, student.Scores.Average());
}
}
输出:
平均分低于80
1 张勇 77.5
2 王磊 72.25
5 扬帆 67
平均分高于80
3 孙敏 83
4 刘晓 88.25
例2,查询人名先排序再分组,可以用姓作为分组关键字。
string[] Name = {"张明","刘新","王宏","刘洋","张媛","张宝","王金贵","刘东","王凯","刘芳"};
var sortedGroups = from name in Name
orderby name
group name by name[0] into newGroup
select newGroup;
foreach (var nameGroup in sortedGroups)
{
Console.WriteLine(nameGroup.Key);
foreach (var name in nameGroup)
Console.WriteLine(" "+name);
}
输出:

刘东 刘芳 刘新 刘洋

王宏 王金贵 王凯

张宝 张明 张媛
输出结果按姓分类,组内排序。
《C#编程指南》(清华大学出版社2011年1月出版,可网购)第5章和第17章专门讨论LINQ查询更新数据库。

热心网友

问什么

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com