linQ 综合练习
题目
民族表:
N001 汉族
N002 满族
N003 藏族
分数表:
1 S001 Sub001 95
2 S001 Sub002 66
3 S001 Sub003 75
4 S002 Sub001 55
5 S002 Sub002 58
6 S002 Sub003 61
7 S003 Sub001 87
8 S003 Sub002 84
9 S003 Sub003 61
10 S004 Sub001 95
11 S004 Sub002 91
12 S004 Sub003 100
-------------------------------------------------------
1、使用表格显示,显示的列名格式为:
学生编号 学生姓名 民族 生日 科目 成绩
S001 张三 汉族 1995-5-5 语文 95
S001 张三 汉族 1995-5-5 数学 66
S001 张三 汉族 1995-5-5 英语 75
S002 李四 满族 1996-6-6 语文 55
....
....
2、组合查询功能,查询种类有:
学生姓名模糊查
民族名称模糊查
生日年份准确查
科目名称准确查
3、分页功能,每页显示3条
思考,分数条件查,可选条件为大于和小于
进行Linq_Score的字段扩展
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// Linq_Score 的摘要说明 /// </summary> public partial class Linq_Score { //学生编号 public string sscode { get { return this.Linq_Student.Student_Code; } } //学生姓名 public string sname { get { return this.Linq_Student.Student_Name; } } //民族名称 public string snation { get { return this.Linq_Student.Linq_Nation.Nation_Name; } } //学生生日 public DateTime sbirthday { get { return Convert.ToDateTime( this.Linq_Student.Student_Birthday); } } //科目名称 public string subjiectname { get { return this.Linq_Subject.Subject_Name; } } }
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> table { background-color: blue; width: 100%; font-size: 20px; text-align: center; } #tr_head { color: white; } .tr_main { background-color: white; } </style> </head> <body> <form id="form1" runat="server"> 学生姓名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> 民族名称:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br /> 生日年份:<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br /> 科目名称:<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox><br /> <asp:Button ID="Button1" runat="server" Text="查询" /><br /> <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> <table> <tr id="tr_head"> <td>学生编号</td> <td>学生姓名</td> <td>民族</td> <td>生日</td> <td>科目</td> <td>成绩</td> </tr> </HeaderTemplate> <ItemTemplate> <tr class="tr_main"> <td><%#Eval("sscode") %></td> <td><%#Eval("sname") %></td> <td><%#Eval("snation") %></td> <td><%#Eval("sbirthday","{0:yyyy年MM月dd日}") %></td> <td><%#Eval("subjiectname") %></td> <td><%#Eval("score") %></td> </tr> </ItemTemplate> <FooterTemplate></table></FooterTemplate> </asp:Repeater> 当前第【<asp:Label ID="Label1" runat="server" Text="1"></asp:Label>】页, <asp:LinkButton ID="lb_prv" runat="server">上一页</asp:LinkButton> <asp:LinkButton ID="lb_next" runat="server">下一页</asp:LinkButton> </form> </body> </html>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { //保持数据的统一性是难点 studentdataDataContext conn = new studentdataDataContext(); int count = 3; List<Linq_Score> lls = new List<Linq_Score>(); protected void Page_Load(object sender, EventArgs e) { Button1.Click += Button1_Click;//查询 lb_prv.Click += lb_prv_Click;//上一页 lb_next.Click += lb_next_Click;//下一页 //页面首次加载的时候 if (!IsPostBack) { lb_prv.Enabled = false;//上一页不能用 lb_next.Enabled = true;//下一页不能用 lls = selectsome(); var lls1 = lls.Skip((Convert.ToInt32(Label1.Text) - 1) * count).Take(count);//显示数据 Repeater1.DataSource = lls1; Repeater1.DataBind(); } } //下一页 void lb_next_Click(object sender, EventArgs e) { Label1.Text = (Convert.ToInt32(Label1.Text) + 1).ToString();//当前页数 lls = selectsome();//每次点击都要重新查一下数据 double num = Math.Ceiling(lls.Count / (count * 1.0));//求最大页数 var lls1 = lls.Skip((Convert.ToInt32(Label1.Text) - 1) * count).Take(count);//repeater需要绑定的数据 if (Label1.Text == num.ToString()) { lb_next.Enabled = false;//如果当前页数变为最大页数,下一页按钮不可用 } lb_prv.Enabled = true;//只要点击下一页按钮,上一页按钮就可用 Repeater1.DataSource = lls1;//数据指向 Repeater1.DataBind();//数据绑定 } //上一页 void lb_prv_Click(object sender, EventArgs e) { Label1.Text = (Convert.ToInt32(Label1.Text) - 1).ToString();//当前页数 lls = selectsome();//每次点击重新查询一下数据 var lls1 = lls.Skip((Convert.ToInt32(Label1.Text) - 1) * count).Take(count);//需要绑定的数据 if (Label1.Text == "1") { lb_prv.Enabled = false;//当前页数变为1,上一页按钮不可用 } lb_next.Enabled = true;//只要点击上一页安妮,下一页按钮就可用 Repeater1.DataSource = lls1;//数据指向 Repeater1.DataBind();//数据绑定 } //查询按钮 void Button1_Click(object sender, EventArgs e) { Label1.Text = "1";//只要点击查询按钮,当前页数就变为1 lb_prv.Enabled = false;//上一页变为不可用 lb_next.Enabled = true;//下一页变为可用 lls = selectsome();//查询数据 int num = lls.Count;//查询数据的条数 var lls1 = lls.Skip((Convert.ToInt32(Label1.Text) - 1) * count).Take(count);//显示的数据 if (num <= count)//查询出的条数小于等于要显示的条数,上一页下一页按钮不可用 { lb_prv.Enabled = false; lb_next.Enabled = false; } Repeater1.DataSource = lls1; Repeater1.DataBind(); } //查询数据方法,返回一个集合 public List<Linq_Score> selectsome() { List<Linq_Score> list = new List<Linq_Score>(); var list1 = conn.Linq_Score.AsQueryable();//查询linq_score表里的所有数据,并不执行,先放在这 var list2 = conn.Linq_Score.AsQueryable(); var list3 = conn.Linq_Score.AsQueryable(); var list4 = conn.Linq_Score.AsQueryable(); if (TextBox1.Text.Length > 0)//如果textbox1不为空 { list1 = conn.Linq_Score.Where(r => r.Linq_Student.Student_Name.Contains(TextBox1.Text)); } if (TextBox2.Text.Length > 0)//如果textbox2不为空 { list2 = conn.Linq_Score.Where(r => r.Linq_Student.Linq_Nation.Nation_Name.Contains(TextBox2.Text)); } if (TextBox3.Text.Length > 0)//如果textbox3不为空 { list3 = conn.Linq_Score.Where(r => r.Linq_Student.Student_Birthday.Value.Year == Convert.ToInt32(TextBox3.Text)); } if (TextBox4.Text.Length > 0)//如果textbox4不为空 { list4 = conn.Linq_Score.Where(r => r.Linq_Subject.Subject_Name == TextBox4.Text); } list = list1.Intersect(list2).Intersect(list3).Intersect(list4).ToList();//求四个集合的交集 return list; } }