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条

思考,分数条件查,可选条件为大于和小于

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

}

时间: 2024-10-11 04:02:22

linQ 综合练习的相关文章

LINQ综合学习大全

LINQ体验 LINQ体验(1)——Visual Studio 2008新特性 一.写本系列的目的 我平时利用课余零碎时间来学习ASP.NET3.5.LINQ.Silverlight.ASP.NET 3.5 Extensions等新东西,通过笔记形式来记录自己所学的历程,也给大家一起学习Visual Studio 2008 和 .NET 3.5提供一个平台,为保证此系列的完整性,我打算先依次介绍一下C# 3.0新语言特性和改进,然后从一条一条LINQ语句分析来贯穿LINQ的知识点.最后通过一个实

linq中order by 和group by (含lambda表达式实现)以及综合案例

3.linq group by(多列) 1.简单的实现方式: var list = from T in Transactions group T by T.ZhiFuQuDao into g select g; 语句描述:Linq使用Group By 统计交易流水的支付渠道方式(支付宝或微信等等). 说明:这里将查询结果 命名为g,一旦重新命名,T 的作用域就结束了,所以,最后select时,只能select g. 2.分类统计各个分类的最大值(Max).最小值(Min).平均值(Average

Func&lt;&gt;委托、扩展方法、yield、linq ForEach综合运用

1.先定义一个Model类    public class P1    {        public string name { get; set; }        public int age { get; set; }    }    2.定义一个扩展方法    作用:用于处理集合数据,通过传入一个委托来实现    注意,扩展方法必须定义在静态类中,而且方法本身也是静态的.    public static class ExtendMethod    {        public st

Ext.js入门:常用组件与综合案例(七)

一:datefield简单示例 二:timefield简单示例 三:numberfield简单示例 四:FormPanel提交 datefield简单示例: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <link href="Ext/resources/css/ext-all.css&

LinQ To DataSet

LINQ to DataSet 是LINQ to ADO.NET 的一个独立技术.使用LINQ to DataSet能够更 快更容易的查询DataSet对象中的数据. LINQ to DataSet 功能主要通过DataRowExtensions和DataTableExtensions静态类 中的扩展方法来实现.LINQ to DataSet 不但能够对DataSet 对象中的单个表进行查询,而且还能够通过联接操作对DataSet对象中的多个表进行查询. DataTableExtensions类

C#综合揭秘——深入分析委托与事件

本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单.还将为您解释委托的协变与逆变,以及如何使用 Delegate 使 Observer(观察者)模式的使用变得更加简单.在事件的介绍上,会讲述事件的使用方式,并以ASP.NET的用户控件为例子,介绍一下自定义事件的使用.最后一节,将介绍Predicate<T>.Action<T>.Func<T,TResult>多种泛型委托的使用和Lamb

【原创】开源Math.NET基础数学类库使用(一)综合介绍

你还可以参考本博客其他.NET开源项目的相关文章: [原创]彩票预测算法:离散型马尔可夫链模型          Newlife XCode组件资源目录汇总[2013年版] [原创]开源.NET下的XML数据库介绍及入门          [原创].NET开源压缩组件介绍与入门 [开源].NET开源表达式计算组件介绍与使用          [原创]开源Word读写组件DocX介绍与入门 [原创]Matlab.NET混编调用Figure窗体                [原创]Matlab与.

.NET中那些所谓的新语法之四:标准查询运算符与LINQ

开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50多个为IEnumerable<T>准备的扩展方法,而LINQ则是一种类似于SQL风格的查询表达式,它们可以大大方便我们的日常开发工作.因此,需要我们予以关注起来! /* 新语法索引 */ 1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和

Entity Framework技术系列之7:LINQ to Entities

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 前言 LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.NET代码,以与查询数据库相同的方式操作内存数据.LINQ提Entity Framework技术系