我有一个包含大学数据库表格的数据集, 这些表中的两个(实际上更多)包含多对多的关系, 特别是我有一个,
学生表(包含有关学生的信息) 课程表(包含有关课程的信息) TakesCourses 表(这是学生和课程表之间的中间表,每个学生都可以有很多课程)
我想输入“学生ID”,并根据 TakesCourses 表中的记录从课程表中获取所有记录。
我的代码 工作 ,内容如下:
string stdInfo = string.Empty;
DataRow[] drStudent = null;
DataRow drCourses = null;
DataRow[] drStdCrs = null;
drStudent = universityDS.Tables["Students"]
.Select(string.Format("StudentID='{0}'", txtStudentID.Text));
stdInfo += string.Format("Student {0} {1}:\nTaking Courses:",
drStudent[0]["FirstName"].ToString().Trim(),
drStudent[0]["LastName"].ToString().Trim());
drStdCrs = drStudent[0].GetChildRows(
universityDS.Relations["FK_TakesCourses_Students"]);
//Can I optimize here? Is there a better way to code this
if (drStdCrs.Length > 0)
{
for (int i = 0; i < drStdCrs.Length; i++)
{
drCourses = drStdCrs[i].GetParentRow(
universityDS.Relations["FK_TakesCourses_Courses"]);
stdInfo += string.Format("\nCourse: {0}",
drCourses["CourseName"]);
}
}
MessageBox.Show(stdInfo);
我的问题是,如何在评论后优化代码? 是否有更好的方式来写这个?
(注意:我是一名正在恢复的开发人员,试图刷新我的技能)
答案 0 :(得分:1)
如果您正在使用的.NET框架版本(或基于项目能够使用)支持LINQ2SQL,我 HIGHLY 建议您花时间学习LINQ,因为它会让您的生活变得更好在处理SQL和每天用.NET编码时都要容易一千倍。
在这个时代,我会避免使用内联SQL,除非它是你唯一的选择,因为它在大多数场所经常会被处死:¬(。
答案 1 :(得分:0)
我完全同意JDoig。下面是使用LINQ to SQL时代码的外观示例:
string stdInfo = string.Empty;
string studentId = txtStudentID.Text;
using (var db = new CourseDataContext())
{
Student student = (
from student in db.Students
where student.StudentID == studentId
select student).Single();
stdInfo += string.Format("Student {0} {1}:\nTaking Courses:",
student.FirstName, student.LastName);
var courseNames =
from taken in student.TakesCourses
select taken.Course.CourseName;
foreach (string courseName in courseNames)
{
stdInfo += string.Format("\nCourse: {0}", courseNames);
}
}
MessageBox.Show(stdInfo);
正如您将看到,它显示代码的代码要少得多,并且在显示代码意图方面做得更好。