相关文章推荐
八块腹肌的四季豆  ·  云盘缩容_云服务器 ...·  1 年前    · 
另类的酱肘子  ·  如何查看mongodb 每个表的占用空间 ...·  1 年前    · 
长情的台灯  ·  python读取GB级的文本数据,防止mem ...·  2 年前    · 
纯真的芒果  ·  Socket中send()函数和recv() ...·  2 年前    · 
温文尔雅的书包  ·  MSBuild Toolset ...·  2 年前    · 
Code  ›  ASP.NET 使用语言集成查询 LINQ进行数据访问_aspx 里使用linq
编程语言 select linq asp
https://blog.csdn.net/baishuiniyaonulia/article/details/105677074
仗义的登山鞋
1 年前
      • 1. LINQ基础
        • 1.1. LINQ概述
        • 1.2. LINQ查询
        • 1.3. 使用var创建隐性局部变量
        • 1.4. Lambda表达式的使用
      • 2. LINQ查询表达式
        • 2.1. 获取数据源 from
        • 2.2. 数据库操作
          • 2.2.1. 筛选 where
          • 2.2.2. 排序 orderby
          • 2.2.3. 分组 group by
          • 2.2.4. 联接 join
          • 2.2.5. 选择/投影 select
        • 3.使用LINQ操作SQL Server数据库
          • 3.1. LINQ查询SQL Server
          • 3.2. LINQ操作SQL Server
          • 3.3. LinqDataSource控件

          1. LINQ基础

          1.1. LINQ概述

          语言集成查询(LINQ)可以为C#和Visual Basic提供强大的查询功能。LINQ引入了标准的、易于学习的查询和更新数据模式,可以对其技术进行扩展以支持几乎任何类型的数据存储。

          LINQ主要支持.NET FreamWork下包含的几种语言,例如C#、VB.NET、F#等等

          1.2. LINQ查询

          LINQ查询的子句语法与SQL子句的含义几乎一致,主要有如下一些子句

          子句 说明
          from 指定数据源和范围变量
          select 指定查询操作返回元素的的类型
          group 对查询结果进行分组
          where 根据布尔表达式对数据进行筛选
          orderby 对查询结果进行排序
          join 连接两个数据源
          let 引入一个用于存储查询表达式中的子表达式结果的范围变量
          into 提供一个标识符,可以充当对join、group或select 子句的结果的引用

          例如下面C#控制台程序,实现了从数组中查找出长度小于7的字符串并输出

          static void Main(string[] args)
              // 定义一个字符串数组
              String[] strCourse = new String[] { "ASP.NET", "SQLServer", "WebAPP", "Servlet", "PHP" };
              // 定义查询语句,在字符串数组中找出长度小于7的元素
              IEnumerable<String> selectQuery = from eachCourse in strCourse where eachCourse.Length < 7 select eachCourse;
              // 执行LINQ查询
              foreach (String str in selectQuery){
                  Console.WriteLine(str);
          

          执行结果为:
          在这里插入图片描述

          1.3. 使用var创建隐性局部变量

          在C#中声明变量时,可以不明确指定其数据类型,而使用关键字var来声明。var关键字用来创建隐型局部变量,它指示编译器根据初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型、匿名类型、用户定义类型、.NET Framework类库中定义的类型或任何表达式。

          例如下面C#控制台程序,用var变量来接收LINQ查询到的自定义类型

          static void Main(string[] args){
              // 定义一个字符串数组
              String[] strCourse = new String[] { "ASP.NET", "SQLServer", "WebAPP", "Servlet", "PHP" };
              // 定义var变量接收数据
              var changeWord = from word in strCourse select new { Upper = word.ToUpper(), Lower = word.ToLower() };
              // 执行LINQ查询
              foreach (var each in changeWord){
                  Console.WriteLine("大写:{0},小写:{1} ", each.Upper, each.Lower);
          

          执行结果为:
          在这里插入图片描述

          1.4. Lambda表达式的使用

          Lambda表达式是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。所有Lambda表达式都使用Lambda运算符"=>",(读为goes to) 。Lambda运算符的左边是输入参数(如果有),右边包含表达式或语句块。

          Lambda表达式的基本语法为:

          ([输入参数]) => [表达式]
          

          例如,Lambda表达式x => x * x读作x goes to x times X,表示接收一个参数X,返回其值的平方。

          又例如下面的C#控制台程序:

          static void Main(string[] args){
              string[] strLists = new string[] { "词典", "汉语词典", "汉语词典珍藏版" };
              // 用Lambda表达式查询数组中包含"汉语"两个字的字符串
              // s.IndexOf("汉语")表示查找包含"汉语"的词在数组中的下标
              string[] strList = Array.FindAll(strLists, s => (s.IndexOf("汉语") >= 0));
              foreach (var each in strList){
                  Console.WriteLine(each);
          

          执行结果为:
          在这里插入图片描述

          2. LINQ查询表达式

          2.1. 获取数据源 from

          在LINQ查询中,首先要做的就是指定数据源。像在大多数编程语言中一样,在C#中变量必须先声明才能使用。在LINQ查询中,最先使用from子句的目的是引入数据源和范围变量。

          例如下面的语句

          // 从tb_stock表获取数据源Info
          var queryStock = from Info in tb_stock select Info;
          
          2.2. 数据库操作
          2.2.1. 筛选 where

          最常用的查询操作是应用布尔表达式形式的筛选器,该筛选器使查询只返回那些表达式结果true的元素。使用where 子句生成结果,实际上,筛选器指定从源序列中排除哪些元素。

          也可以使用熟悉的与或运算符来根据需要在where子句中应用任意数量的筛选表达式。

          例如下面语句

          // 从tb_stock表中筛选name为"电脑",type为"S300"的记录
          var query = from Info in tb_stock 
          	where Info.name == "电脑" && Info.type == "S300"
          	select Info;
          
          2.2.2. 排序 orderby

          通常可以很方便地将返回的数据进行排序,orderby 子句将使返回的序列中的元素按照被排序的类型的默认比较器进行排序。

          例如下面语句

          // 从tb_sell_detailed表中查询qty字段,并降序排列(升序为ascending)
          var query = from sellInfo in tb_sell_detailed
          	orderby sellInfo.qty descending
          	select sellInfo;
          
          2.2.3. 分组 group by

          使用group子句可以按指定的键分组结果。

          例如下面语句

          // 从dataset的V_Salelnfo表中查出数据
          var query = from item in dataset.Tables["V_Salelnfo"].AsEnumerable()
          // 根据item中的ClientCode进行分组,然后把分组后的数据存放到新的数据表中
          group item by item.Field<string>("ClientCode") into g
          select new
          	客户代码 = g.Key,
          	客户名称 = g.Max
          
          
          
          
              
          (itm => itm.Fieldstring>("ClientName"),
          	销售总额 = g.Sum(itm => itm.Field<double>("Amou),Tosring!("#,##0.00")
          
          2.2.4. 联接 join

          联接运算可以创建数据源中没有显式建表的序列之间的关联

          例如,可以通过执行联接来查找位于同一地点的所有客户和经销商。在LINQ中, join子句始终针对对象集合而非直接针对真实的数据库表。

          例如下面的语句

          // [表名1] join in [表名2] on [字段名1] equals [字段名2]
          // 将表1与表2中字段名相等的记录进行连接,组成新表
          var innerJoinQuery = from main in tb_sell_main
          join detailed in tb_sell_detailed on main.billcode equals detailed.billcode
          select new{
          	销售编号 = main.billcode,
          	购货单位 = main.units,
          	商品编号 = detailed.tradecode,
          	商品全称 = detailed.fullname 
          
          2.2.5. 选择/投影 select

          select子句生成查询结果并指定每个返回的元素的类型。例如,可以指定结果包含的是整个对象,或者是一个成员,或者是成员的子集,或者是基于新对象创建的数据对象(new关键字)。

          当select子句生成从源查询出另一个表的操作就称为“投影”

          select new{
          	销售编号 = mainbillcode,
          	购货单位 = main.units,
          	商品编号 = detailed.tradecode,
          	商品全称 = detailed.fullname,
          	单位 = detailed.unit,
          	数量 = detailed.qty,
          	单价 = detailed.price,
          	金额 = detailed.tsum,
          	录单日期 = detailed.bllate
          

          3.使用LINQ操作SQL Server数据库

          3.1. LINQ查询SQL Server

          要使用LINQ查询SQL Server数据库,首先要配置LINQ to SQL类,步骤如下

          1、创建LINQ to SQL类
          步骤如图所示:
          在这里插入图片描述
          如果发现自己的VS里面找不到LINQ to SQL 类,那就打开Visual Studio Installer,点击Modify,点击Individual Components,在Code tools中选中"LINQ to SQL tools"进行安装,安装完成以后重启VS再重复上图步骤就有了

          2、配置LINQ to SQL类
          首先打开"服务器资源管理器",然后按照下图步骤操作,填写服务器名和数据库名后点击"确定"(身份验证可以是Windows身份验证也可以是SQL Server身份验证):
          在这里插入图片描述3、创建数据源
          创建数据源的方法如图步骤所示
          在这里插入图片描述
          完成以上三个步骤创建好了数据源之后,会自动生成一个数据上下文类DataContext,使用DataContext类就可以使用LINQ对SQL Server数据库进行操作了。

          一般来说,DataContext类的全名是Linq to SQL类的名字+DataContext,例如本博客设置的Linq to SQL类的名字是默认的DataClasses1.dbml,那么DataContext类的名字就是DataClasses1DataContext

          下面的代码实现了把数据源的数据显示到asp页面中:

          // .aspx文件
              <form id="form1" runat="server">
                      <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">
                          <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                          <EditRowStyle BackColor="#999999" />
                          <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                          <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                          <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                          <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                          <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                          <SortedAscendingCellStyle BackColor="#E9E7E2" />
                          <SortedAscendingHeaderStyle BackColor="#506C8C" />
                          <SortedDescendingCellStyle BackColor="#FFFDF8" />
                          <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
                      </asp:GridView>
                  </div>
              </form>
          </body>
          // .aspx.cs文件
          protected void Page_Load(object sender, EventArgs e){
              // ConnectionStrings[""]中的数据源连接字符串可以在packages.config文件的<connectionStrings></connectionStrings>的add标签的name属性中找到,
              // 例如本程序中的数据源连接字符串为db_LibraryMSConnectionString,则可在packages.config文件中的以下语句中找到
              // < connectionStrings >
              // < add name = "db_LibraryMSConnectionString" connectionString = "Data Source=DEITIVOD;Initial Catalog=db_LibraryMS;Integrated Security=True" providerName = "System.Data.SqlClient" />
              // </ connectionStrings >
              DataClasses1DataContext linq = new DataClasses1DataContext(
                  System.Configuration.ConfigurationManager.ConnectionStrings["db_LibraryMSConnectionString"].ToString());
          	// 查询数据表tb_bookinfo中book_name字段包含"sp"字符串的记录
              var result = from info in linq.tb_bookinfo
              			 where info.book_name.Contains("sp")
                           select new{
                               图书ID = info.id,
                               图书编号 = info.book_code,
                               图书名称 = info.book_name
              GridView1.DataSource = result;
              GridView1.DataBind();
          

          执行结果如下,可以看到数据很顺利的从展示在asp页面中
          在这里插入图片描述

          3.2. LINQ操作SQL Server

          除查询外,LINQ对SQL Server的操作还有3种,添加、修改和删除,它们分别要用到的方法如下表所示:

          操作方法
          添加InsertOnSubmit、SubmitChanges
          修改SubmitChanges
          删除DeleteAllOnSubmit、SubmitChanges

          例如下面的代码,实现了向数据表中添加数据的操作:

          // .aspx文件
              <form id="form1" runat="server">
                      <asp:Label ID="Label1" runat="server" Text="留言标题"></asp:Label>
                      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                  </div>
                      <asp:Label ID="Label2" runat="server" Text="E-mail地址"></asp:Label>
                      <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                  </div>
                      <asp:Label ID="Label3" runat="server" Text="留言内容"></asp:Label>
                      <asp:
          
          
          
          
              
          TextBox ID="TextBox3" runat="server" TextMode="MultiLine"></asp:TextBox>
                  </div>
                      <asp:Button ID="Button1" runat="server" Text="发表" OnClick="Button1_Click" />
                  </div>
              </form>
          </body>
          // .aspx.cs文件
          protected void Page_Load(object sender, EventArgs e){
          	DataClasses1DataContext linq = new DataClasses1DataContext(
                         System.Configuration.ConfigurationManager.ConnectionStrings["db_LibraryMSConnectionString"].ToString());
              var result = from row in linq.leaveword where row.Id == 0 select row; // 修改id为0的数据
              foreach (leaveword info in result) {
                  info.title = ".";
              // 提交修改
              linq.SubmitChanges();
          	// 删除记录
              var delete = from row in linq.leaveword where row.Id == 1 select row; // 获取id为1的数据
              linq.leaveword.DeleteAllOnSubmit(delete);
              linq.SubmitChanges();
          protected void Button1_Click(object sender, EventArgs e){
              DataClasses1DataContext linq = new DataClasses1DataContext(
                  System.Configuration.ConfigurationManager.ConnectionStrings["db_LibraryMSConnectionString"].ToString());
              // 数据表对象
              leaveword info = new leaveword();
              // 将TextBox的数据插入数据表中
              info.title = TextBox1.Text;
              info.email = TextBox2.Text;
              info.context = TextBox3.Text;
              // 执行语句
              linq.leaveword.InsertOnSubmit(info);
              linq.SubmitChanges();
              Page.ClientScript.RegisterStartupScript(GetType(), "", "alert('留言成功!');");
          

          执行结果如图所示:
          在这里插入图片描述
          此时在数据表leaveword中,可以看到已经添加了刚刚输入的数据
          在这里插入图片描述

          在第二次运行程序时,因为有id为0的记录,因此将其title修改成了".",如图所示
          在这里插入图片描述
          此时再插入一条数据,ID若为1,则再下次运行程序时会自动删除id为1的记录

          3.3. LinqDataSource控件

          LinqDataSource是一个数据源绑定控件,通过这个控件可以直接对DataContext对象进行插入、更新、删除操作

          LinqDataSource在VS开发环境的工具箱的数据列当中,在代码中加入控件以后,先确定要操作的数据源,在确定要操作的数据表,另外还可以在"高级"选项中选择"自动删除、插入和更新"功能
          在这里插入图片描述
          在下面的代码中,就实现了一个具有自动查询、删除、插入和更新功能的LinqDataSource控件:

          // .aspx文件
              <form id="form1" runat="server">
                      <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="WebApplication6.DataClasses1DataContext" EnableDelete="True" EnableInsert="True" EnableUpdate="True" EntityTypeName="" TableName="leaveword"></asp:LinqDataSource>
                  </div>
                      <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="LinqDataSource1">
                          <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                          <Columns>
                              <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" SortExpression="Id" />
                              <asp:BoundField DataField="title" HeaderText="title" SortExpression="title" />
                              <asp:BoundField DataField="email" HeaderText="email" SortExpression="email" />
                              <asp:BoundField DataField="context" HeaderText="context" SortExpression="context" />
                          </Columns>
                          <EditRowStyle BackColor="#999999" />
                          <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                          <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                          <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                          <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                          <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                          <SortedAscendingCellStyle BackColor="#E9E7E2" />
                          <SortedAscendingHeaderStyle BackColor="#506C8C" />
                          <SortedDescendingCellStyle BackColor="#FFFDF8" />
                          <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
                      </asp:GridView>
                  </div>
              </form>
          </body>
          

          执行结果如下,可以看到,我们没有编写任何操作数据的代码,数据就自动的显示到了相应的数据绑定控件中
          在这里插入图片描述

          文章目录1. LINQ基础1.1. LINQ概述1.2. LINQ查询1.3. 使用var创建隐性局部变量1.4. Lambda表达式的使用2. LINQ查询表达式2.1. 获取数据源 from2.2. 数据库操作2.2.1. 筛选 where2.2.2. 排序 orderby2.2.3. 分组 group by2.2.4. 联接 join2.2.5. 选择/投影 select3.使用LINQ操作... 查询语句是一种从数据源中检索数据的表达式,在开发中受用非常广泛,通常用专属的查询语言来表示。     随着时间的推移,人们已经为各种数据源开发了不同的语言,为了减轻开发人员的工作,微软推出了新的查     询技术------LINQ         LINQ的全称为语言集成查询(Language Integrated Query),提供了一种跨数据源和数据格式的统一模型,
          LINQ学习总结: LINQ使用的关键字 :select, filter, sort, group, and transform data. 1.LINQ to Objects:查找内存中的对象集合。 2.LINQ to XML:可以不通过C#类直接读取XML文档。 3.LINQ to Entities:不写读取数据库的代码便可以读取数据库信息。 [b]一、LINQ基础知识[/b] ...
 
推荐文章
八块腹肌的四季豆  ·  云盘缩容_云服务器 ECS(ECS)-阿里云帮助中心
1 年前
另类的酱肘子  ·  如何查看mongodb 每个表的占用空间 mongodb查看表内容_mob64ca140ac564的技术博客_51CTO博客
1 年前
长情的台灯  ·  python读取GB级的文本数据,防止memoryError_accumulate_zhang的博客-CSDN博客
2 年前
纯真的芒果  ·  Socket中send()函数和recv()函数详解_MultiMedia之旅的博客-CSDN博客
2 年前
温文尔雅的书包  ·  MSBuild Toolset (ToolsVersion) - MSBuild | Microsoft Learn
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号