纠结的LINQ
数据库中有四张表分别为Student,School, StudentTuror(学生导师表),Tutor
现在想使用GridView将四个表的连接操作后的部分字段显示出来。
我目前的作法是:
YSComputerDataContext yscomputerDataContext = new YSComputerDataContext();
var queryStudent = yscomputerDataContext.GetTable<Student>();
var querySchool = yscomputerDataContext.GetTable<School>();
var queryTutor = yscomputerDataContext.GetTable<Tutor>();
var queryStudentTutor = yscomputerDataContext.GetTable<StudentTutor>();
queryResult = from student in queryStudent
join school in querySchool on student.SchoolId equals school.Id
join studentTutor in queryStudentTutor on student.UserId equals
studentTutor.StudentUserId
join tutor in queryTutor on studentTutor.TutorId equals tutor.Id
where tutor.SchoolId != null
select new
{
学生姓名 = student.Name,
所在学校 = school.Name,
预计答辩时间 = ((DateTime)(student.ThesisDefenseTime)).ToShortDateString(),
第一稿提交时间 = ((DateTime)(student.FirstSubmitTime)).ToShortDateString(),
导师姓名 = tutor.Name,
当前状态 = student.Status
};
GridViewStudent.DataSource = queryResult;
GridViewStudent.DataBind();
现在有一个问题要解决,就是当在GridView中点击不同的字段时,要根据不同的字段进行排序,
那我现在的想法是使用Linq动态查询,即针对OrderBy的动态查询
请教如何实现?
再有,这里能不能直接使用LinqDataSource绑定到GridView上呢(主要是要多一连接,不知道如何解决,我感觉LinqDataSource只能作用在一个表上)
有其它的解决办法也可以,但前提是要使用LINQ
------解决方案--------------------
用反射动态orderby
private static object GetPropertyValue(object obj, string property)
{
System.Reflection.PropertyInfo propertyInfo=obj.GetType().GetProperty(property);
return propertyInfo.GetValue(obj, null);
}
queryResult =queryResult.OrderBy(q=> GetPropertyValue(q,"学生姓名"));
------解决方案--------------------
http://blog.csdn.net/q107770540/archive/2011/01/13/6133484.aspx