LinQ - - 集成化查询语言

LinQ to SQL
LinQ - 集成化查询语言。
LINQ  语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展。
      它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。
    LinQ to SQL ——查询SQLServer数据库
    LinQ to Object    —— 查询内存中的集合

ORM思想:O - R - M
Object 对象——实体类
Relation 关系数据库——数据库中的表
Mapping 映射——把类和表;字段和列 对应。

LinQ生成实体类的结构:
1.生成一个DataContext类。相当于程序内存和硬盘数据库之间的桥梁。
2.生成一系列的实例类,与表是一一对应的。
3.每个实体类中都有与表中列相应的属性(值类型的属性都是可以为空的类型bool? int? double?)
int? a=null;//可以为空的类型
System.Nullable<bool> _Sex;
System.Nullable<System.DateTime> _Birthday;
4.数据库中表和表之间的关联关系,被转化成内存中类中的成员变量。

一、增
1.造对象
2.跟context说一声
3.context提交
例:
        //创建内存对象与数据库之间的桥梁
        MyDBDataContext context = new MyDBDataContext();

//第一步:造实体对象
        Info data = new Info();
        data.Code = "p101";
        data.Name = "张飞";
        data.Sex = true;
        data.Nation = "n001";
        data.Birthday = new DateTime(1990, 3, 15);

//第二步:跟Context说一下,提交的时候对它执行插入操作
        context.Info.InsertOnSubmit(data);

//第三步:提交
        context.SubmitChanges();

二、删
1.从数据库中找出来
2.跟context说一下,提交的时候,删除
3.提交

//创建内存对象与数据库之间的桥梁
        MyDBDataContext context = new MyDBDataContext();

//第一步:找出要删除的对象。
        //var query = from p in context.Info where p.Code == "p101" select p;
        var query = context.Info.Where(p => p.Code == "p101");
        Info data = query.First();
       
        //第二步:跟Context说一下,提交的时候把这个对象给删掉。
        context.Info.DeleteOnSubmit(data);
        //第三步:提交
        context.SubmitChanges();

三、改
1.从数据库中找出对象来
2.把对象的值改一下。
3.提交送回去。

//创建内存对象与数据库之间的桥梁
        MyDBDataContext context = new MyDBDataContext();

//第一步:从数据库找出对象来
        var query = context.Info.Where(p=>p.Code == "p009");
        Info data = query.First();

//第二步:改
        data.Name = "田七";
        data.Sex = false;

//第三步:提交
        context.SubmitChanges();

四、查
LINQ语句写法        扩展方法

没有条件                    查询所有         var query = from p in context.Info select p;
有条件
                  单
                               等 值              var query = from p in context.Info where p.Nation == "n001" select p;      
                               不等值            var query = from p in context.Info where p.Birthday < new DateTime(1990, 01, 01) select p;
                  多
                               与 或              var query = from p in context.Info where p.Nation == "n001" && p.Sex==true select p;
                  模糊
                               以..开头
                                          StartsWiths       var query = from p in context.Work where p.Firm.StartsWith("中国") select p;
                              以..结尾
                                          EndsWiths         var query = from p in context.Work where p.Firm.EndsWith("行") select p;
                              包含..
                                          Contains()         var query = from p in context.Work where p.Firm.Contains("内蒙") select p;
                              指定位置是...
                                          Substring(...) == "值"     var query = from p in context.Work where p.Firm.Substring(1, 1) == "国" select p;
                              var query = from p in context.Work where p.Firm.StartsWith("中国") && p.Firm.EndsWith("行") select p;
    链接查询和子查询有语法,但很少写。
        直接可使用对象之间的关系对象进行操作,Linq会自动为我们生成出相应的连接语句或子查询语句。

var query=from p in context.Info where p.Nation1.Name=="汉族" select p;

排序:
    orderby 属性名 升序                          var query = from p in context.Work orderby p.StartDate select p;
    orderby 属性名 descending 降序         var query = from p in context.Work orderby p.StartDate descending select p;

扩展方法:
    OrderBy()
    OrderByDescending()

统计函数。
    把LinQ语句括起来,调用相应的方法即可
    Count()                                            var query = (from p in context.Info select p).Count();
    Sum(p=>p.属性名)
    Average(p=>p.属性名)
    Max(p=>p.属性名)
    Min(p=>p.属性名)

取集合第一个对象。
    First()                                             query.first();

分页查询:
    skip(要跳过的条数).take(要取出来的条件)      var query = (from p in context.Work select p).Skip(6).Take(3);

语句还可以这么写:

var query = context.Info.Where(p => p.Nation1.Name == "汉族").Where(p => p.Sex == false);

var query = context.Info.Where(p => p.Nation1.Name == "汉族" && p.Sex == false);

var query = context.Info.OrderBy(p=>p.Birthday);

var query = context.Info.OrderByDescending(p => p.Birthday);

var query = context.Info.Max(p => p.Birthday);

集合操作:交、并、差
        var q1 = context.Info.Where(p => p.Nation != "n001");
        var q2 = context.Info.Where(p => p.Sex == true);

交集:var query = q1.Intersect(q2);
并集:var query = q1.Union(q2);
差集:var query = q1.Except(q2);

练习:

public partial class Default4 : System.Web.UI.Page
{
    private const int PageSize = 3;//定义一个常量,每页显示的数量
    private MYDBDataContext _context = new MYDBDataContext();
    //填充分页的下拉列表下拉列表
    private void FillPage()
    {
         //获取总页数
        int RowsCount = _context.Car.Count();//综行数
        int PageCount = Convert.ToInt32(Math.Ceiling(1.0*RowsCount/PageSize));
        //填充下拉列表
        for (int i = 0; i < PageCount; i++)
        {
            ListItem li = new ListItem((i + 1).ToString(), i.ToString());
            ddlPage.Items.Add(li);
        }
    }
    //显示指定页的汽车数据
    private void ShowCar()
    {
        var query = _context.Car.Skip(PageSize * Convert.ToInt32(ddlPage.SelectedValue)).Take(PageSize);
        Repeater1.DataSource = query;
        Repeater1.DataBind();

        //显示的页数
        lblall.Text = ddlPage.Items.Count.ToString();
        lbl.Text = ddlPage.SelectedItem.Text;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            FillPage();
            ShowCar();
        }
    }
    //下拉列表
    protected void ddlPage_SelectedIndexChanged(object sender, EventArgs e)
    {
        ShowCar();
    }
    //首页
    protected void btnfirst_Click(object sender, EventArgs e)
    {
        ddlPage.SelectedIndex = 0;
        ShowCar();
    }
    //尾页
    protected void btnend_Click(object sender, EventArgs e)
    {
        //ddlPage.SelectedIndex = Convert.ToInt32(1.0 * _context.Car.Count() / PageSize) - 1;
        ddlPage.SelectedIndex = ddlPage.Items.Count - 1;
        ShowCar();
    }
    //上一页
    protected void btnprev_Click(object sender, EventArgs e)
    {
        if (ddlPage.SelectedIndex<=0)
        {
            ShowCar();
            btnprev.Enabled = false;
        }
        if (ddlPage.SelectedIndex>0)
        {
            ddlPage.SelectedIndex--;
            ShowCar();

            btnprev.Enabled = true;
        }

    }
    //下一页
    protected void btnnext_Click(object sender, EventArgs e)
    {
        if (ddlPage.SelectedIndex<ddlPage.Items.Count-1)
        {
            ddlPage.SelectedIndex++;
            ShowCar();
        }
    }
}

1.造一个界面:

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
        #tbinfo
        {
            background-color:navy;
        }
        .ithead
        {
            color:white;
            font-weight:bold;
            text-align:center;
            font-family:微软雅黑;
        }
        .ititem
        {
            background-color:#ffd800;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:Repeater ID="Repeater1" runat="server">
            <HeaderTemplate>
                <table width="100%" border="0" cellpadding="5" cellspacing="1" id="tbinfo">
                    <tr class="ithead">
                        <td width="5%">代号</td>
                        <td width="10%">姓名</td>
                        <td width="5%">性别</td>
                        <td width="5%">民族</td>
                        <td width="15%">生日</td>
                        <td width="25%">单位</td>
                        <td width="10%">部门</td>
                        <td width="10%">父亲</td>
                        <td width="10%">母亲</td>
                        <td width="5%">配偶</td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                    <tr class="ititem">
                        <td><%# Eval("Code") %></td>
                        <td><%# Eval("Name") %></td>
                        <td><%# Eval("Sexname") %></td>
                        <td><%# Eval("Nationname") %></td>
                        <td><%# Eval("Birthday","{0:yyyy年MM月dd日}") %></td>
                        <td><%# Eval("firm") %></td>
                        <td><%# Eval("depart") %></td>
                        <td><%# Eval("father") %></td>
                        <td><%# Eval("mother") %></td>
                        <td><%# Eval("couple") %></td>
                    </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>

    </div>
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </form>
</body>

2.造一个info类(部分):方便直接调用属性

public partial class Info
{
    public string Sexname
    {
        get
        {
            return Sex.Value == true ? "男" : "女";
        }
    }
    public string Nationname
    {
        get
        {
            return Nation1.Name;
        }
    }
    public string firm
    {
        get
        {
            if (this.Work.Count>0)
            {
               Work data= Work.OrderByDescending(p => p.Orders).First();
               return data.Firm;
            }
            else
            {
                return "无";
            }
        }
    }
    public string depart
    {
        get
        {
            if (this.Work.Count>0)
            {
                Work data = this.Work.OrderByDescending(p => p.Orders).First();
                return data.Depart;
            }
            else
            {
                return "无";
            }
        }
    }
    public string father
    {
        get
        {
            if (this.Family.Count > 0)//家庭关系存在
            {
                var query = this.Family.Where(p => p.Title == "T001");
                if (query.Count() > 0)//有父亲这项填了
                {
                    return query.First().Name;
                }
                else
                {
                    return "空";
                }
            }
            else
            {
                return "无";
            }
        }
    }
    public string mother
    {
        get
        {
            if (this.Family.Count>0)
            {
                var query = this.Family.Where(p=>p.Title=="T002");
                if (query.Count()>0)
                {
                    return query.First().Name;
                }
                else
                {
                    return "空";
                }
            }
            else
            {
                return "无";
            }
        }
    }
    public string couple
    {
        get
        {
            if (this.Family.Count>0)
            {
                var query = this.Family.Where(p=>p.Title=="T003");
                if (query.Count()>0)
                {
                    return query.First().Name;
                }
                else
                {
                    return "空";
                }
            }
            else
            {
                return "无";
            }
        }
    }
}

3.主页:绑定数据

 private MYDBDataContext _Context = new MYDBDataContext();
    private void ShowInfo()
    {
        Repeater1.DataSource = _Context.Info;
        Repeater1.DataBind();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ShowInfo();
        }
    }
时间: 2024-08-27 09:22:14

LinQ - - 集成化查询语言的相关文章

LinQ:集成化语言增删改查

LinQ:集成化语言增删改查 O--M--R Object:对象   Mapping:映射   Relation:关系 用法: 一.简单的查询 造一个上下文对象: HRDataContext _context = new HRDataContext(); 扩展方法,查所有 dataGridView1.DataSource = _context.Info; 根据条件查,括号里要写Lambda表达式 List<Info> list = _context.Info.Where(p=>p.列名=

简述SQL结构化查询语言

SQL(Structure Query Language结构化查询语言) 一.使用数据库(DataBase)的必要性 可以结构化的存储大量的数据信息,方便用户有效的检索和访问 有效的保持数据的一致性.完整性.降低数据冗余 满足应用的共享和安全方面 二.Database基本概念 1.数据 描述事物的符号记录称为data.(在database中data是以"记录record"形式按统一的格式进行存储的,相同格式和type的data统一放在一起.) 2.Database和database t

简单了解SQL(结构化查询语言)

简单了解SQL(结构化查询语言) 结构化查询语言(英语:Structural Query Language,缩写:SQL),是一种特殊目的之编程语言,用于数据库中的标准数据查询语言,IBM公司最早使用在其开发的数据库系统中.1986年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准.不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充.所以,实际上不同数据库系

SQL结构化查询语言分类介绍

SQL结构化查询语言分类介绍 SQL:结构化查询语言,它是一种对关系型数据进行定义和操作的语言方法. SQL结构化查询语言包含6个部分: 一.数据查询语言(DQL) DQL全称Data Query Language,其语句也称"数据检索语句",作用是从表中获取数据,确定数据怎样在应用程序给出.关键字SELECT是DQL(也是所有SQL)用的最多的动词,其他DQL常用的保留字WHERE,ORDER BY,GROUP BY和HAVING.这些DQL保留字常与其他类型的SQL语句一起使用.

集成化的研发协作平台发展趋势

研发协作平台正在向高度集成化方向发展,在2008年6月份左右,作为企业研发协作平台的业界老大IBM,向全球软件客户强力推出了他们的下一代面向软件交付技术的研发协作平台Jazz,IBM 力图在不久的将来将IBM Rational的所有产品都逐步迁移到Jazz新平台下.高度集成化研发活动的各种点工具正成为集成化研发协作平台的一个新趋势.希望本文能够给读者了解集成化研发协作平台带来一些帮助. 在具体分析集成化的研发协作平台之前,我们先来了解一下绝大多数软件研发团队的一个典型工作情景: 软件开发人员通过

结构化查询语言

结构化查询语言简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统:同时也是数据库脚本文件的扩展名.结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作.它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口.结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能. 结构化查询语言包含6个部分: 一:数据查询语

VS(Visual Studio)功能集成化

VS(Visual Studio)功能集成化 其实 VS 是一款高大上的 IDE ,想逐步调试啊.进入函数什么的都很方便,今天就专门发个关于如何使 VS 更加方便我们使用的教程吧=.=所用版本:VS2013 集成谷歌风格检查 由于谷歌风格的检查文件cpplint.py(上去复制下来保存为.py就好啦 )是Python来运行的,所以首先我们需要一个python~ (PS: 版本不能太高,因为可升级之后修改了一些函数格式什么的,导致文件不能正常运行,楼主亲测 2.7的版本可以用~) 嗯 下载什么就不

数据库入门4 结构化查询语言SQL

知识内容: 1.SQL介绍 2.常用SQL命令 3.SQL语句练习 一.SQL介绍 1.什么是SQL 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统:同时也是数据库脚本文件的扩展名. 结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作.它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系

SQL 数据库结构化查询语言

1.数据库 常见数据库 MySQL:开源免费的数据库,小型的数据库. Oracle:收费的大型数据库,Oracle 公司的产品 DB2:IBM 公司收费的数据库,常应用在银行系统中 SQLServer:MicroSoft 公司收费的中型数据库,C#..net 等语言常使用 SQLite:嵌入式的小型数据库,应用在手机端 2.SQL 语言 数据库结构化查询语言 SQL 是 Structure Query Language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言. SQL 语句主要