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;
    }

}
复制代码

posted @ 2016-08-30 15:45  一人饮酒醉(SeVen❤)  阅读(288)  评论(0编辑  收藏  举报