日期:2014-05-20  浏览次数:20749 次

纠结的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