读书人

纠结的LINQ解决方法

发布时间: 2012-02-13 17:20:26 作者: rapoo

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

读书人网 >.NET

热点推荐