c# linq 多表内联实例

来源:互联网 发布:c语言数据结构与算法 编辑:程序博客网 时间:2024/06/05 01:06
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Collections;namespace WebApplication29{    public partial class _Default : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                BindStudents();            }        }        /// <summary>        /// Binding the filter list of students.        /// </summary>        private void BindStudents()        {            GridView1.DataSource = GetFilterStudents();            GridView1.DataBind();        }        /// <summary>        /// Get the filter list of students.        /// </summary>        /// <returns></returns>        private IList GetFilterStudents()        {            List<Student> students = GetStudents();            List<Grade> grades=GetGrades();            List<School> schools = GetSchools();            //inner join            var query = from a in students                        join b in grades on a.GradeID equals b.GradeID into ab                        from b in ab.DefaultIfEmpty()                        join c in schools on b.SchoolID equals c.SchoolID into bc                        from c in bc.DefaultIfEmpty()                        select new                        {                            StudentID=a.StudentID,                            StudentName=a.StudentName,                            GradeName=b.GradeName,                            SchoolName=c.SchoolName                        };            //where            query = query.Where(s => s.StudentID != 1);            //order by            query = query.OrderByDescending(s => s.StudentID);            return query.ToList();        }        /// <summary>        /// Get the list of students.        /// </summary>        /// <returns></returns>        private List<Student> GetStudents()        {            List<Student> students = new List<Student>();            students.Add(new Student(1, "student1", 1));            students.Add(new Student(2, "student2", 1));            students.Add(new Student(3, "student3", 2));            students.Add(new Student(4, "student4", 2));            students.Add(new Student(5, "student5", 3));            students.Add(new Student(6, "student6", 4));            return students;        }        /// <summary>        /// Get the list of grades        /// </summary>        /// <returns></returns>        private List<Grade> GetGrades()        {            List<Grade> grades = new List<Grade>();            grades.Add(new Grade(1, "grade1", 1));            grades.Add(new Grade(2, "grade2", 1));            grades.Add(new Grade(3, "grade1", 2));            grades.Add(new Grade(4, "grade2", 2));            return grades;        }        /// <summary>        /// Get the list of schools.        /// </summary>        /// <returns></returns>        private List<School> GetSchools()        {            List<School> schools = new List<School>();            schools.Add(new School(1, "school1"));            schools.Add(new School(2, "school2"));            return schools;        }    }    /// <summary>    /// Class of school.    /// </summary>    public class School    {        public School() { }        public School(int _schoolID, string _schoolName)        {            this.SchoolID = _schoolID;            this.SchoolName = _schoolName;        }        public int SchoolID { get; set; }        public string SchoolName { get; set; }    }    /// <summary>    /// Class of grade.    /// </summary>    public class Grade    {        public Grade() { }        public Grade(int _gradeID,string _gradeName,int _schoolID)        {            this.GradeID = _gradeID;            this.GradeName = _gradeName;            this.SchoolID = _schoolID;        }        public int GradeID { get; set; }        public string GradeName { get; set; }        public int SchoolID { get; set; }    }    /// <summary>    /// Class of student.    /// </summary>    public class Student    {        public Student() { }        public Student(int _studentID, string _studentName, int _gradeID)        {            this.StudentID = _studentID;            this.StudentName = _studentName;            this.GradeID = _gradeID;        }        public int StudentID { get; set; }        public string StudentName { get; set; }        public int GradeID { get; set; }    }}