linQ 综合练习
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;
}
}




浙公网安备 33010602011771号