linq查询数据库实例
whereiflinq用法

whereiflinq用法一、LINQ基本概念和用法1.查询表达式语法LINQ提供了类似于SQL的查询语法,可以使用查询表达式来查询数据。
查询表达式由“from”、“where”、“select”等关键字组成,用于描述数据源和查询条件。
例如,我们有一个名为`students`的集合,其中包含了学生的姓名、年龄和成绩信息。
我们可以使用查询表达式来查询成绩大于80分的学生姓名:```csharpvar query = from student in studentsselect ;```2.方法扩展语法除了查询表达式语法,LINQ还提供了一组方法扩展,可以通过方法链的方式来进行查询和操作。
方法扩展使用`IEnumerable<T>`接口上的扩展方法,通过一系列的方法调用来描述查询。
使用方法扩展语法,我们可以将上述示例改写为:```csharpvar query = students.Where(student => student.Score > 80).Select(student => );```两种语法的结果是等价的,开发人员可以根据个人喜好和使用场景选择使用哪种语法。
3.查询结果的延迟执行LINQ的查询操作都是延迟执行的,即查询不会立即执行,而是在遍历结果时才会执行。
这种延迟执行的机制可以提高性能和资源利用率。
例如,我们对一个包含巨大数据量的查询进行筛选操作,只有在真正需要查询结果时才会进行计算和检索。
二、常见的LINQ用法和场景1.数据集合查询LINQ最常用的场景就是对数据集合进行查询。
数据集合可以是数组、列表、集合等。
我们可以根据具体的查询需求,使用查询表达式或方法扩展来查询数据。
例如,根据学生的成绩对学生列表进行排序:```csharpvar query = from student in studentsorderby student.Score descendingselect student;```2.对象查询和映射LINQ支持对任意对象进行查询,不仅限于数据集合。
Linq查询语句

Linq查询语句LINQ表达式要点:1 linq表达式要以from开头2 必须是select⼦句或者是group⼦句结尾3 from⼦句, where⼦句,select⼦句,group⼦句, into⼦句,排序⼦句,let⼦句, join⼦句4 ⼦句⽰例:4.1 from 变量名 in 数据源 where 条件 select 变量名where⼦句是⽤来筛选元素select⼦句是⽤来输出元素例如:var ordersByCountry=from order in orderswhere order.ShipCountry.Equels(country)select order;4.2 排序⼦句 OrderBy OrderBy.......Descending例如:var OrderBy=from order in Orderswhere order.shipCountry.equals(country)orderby order.shipCountry,orderby order.fregith descendingselect order;4.3 group⼦句 group⼦句返回的是⼀个基于IGroup<TKey,TElement>繁星接⼝的对象序列例如:var orderGroup=from order in Ordersgroup orderby order.shipCountry //group⼦句返回的是⼀个集合 Dictionary<string,List<Orders>> orderList=new Dictionary<string,list<Orders>();//效率不⾼ foreach(var or in orderGroup){orderlist.add(or.key,or.ToList<Orders>());}4.4 join⼦句:如果数据源中的⼀个元素和另外⼀个数据源中的元素相等,这两个数据源可以⽤join⼦句进⾏关联(表连接)join⼦句是⽤equals关键字进⾏⽐较的,⽽不是常⽤的==(双等于号)。
LINQ分组查询统计

LINQ分组查询统计这⾥介绍Linq使⽤Group By和Count得到每个CategoryID中产品的数量,Linq使⽤Group By和Count得到每个CategoryID中断货产品的数量等⽅⾯。
学经常会遇到Linq使⽤Group By问题,这⾥将介绍Linq使⽤Group By问题的解决⽅法。
1.计数1. var q =2. from p in db.Products3. group p by p.CategoryID into g4. select new {5. g.Key,6. NumProducts = g.Count()7. };语句描述:Linq使⽤Group By和Count得到每个CategoryID中产品的数量。
说明:先按CategoryID归类,取出CategoryID值和各个分类产品的数量。
2.带条件计数1. var q =2. from p in db.Products3. group p by p.CategoryID into g4. select new {5. g.Key,6. NumProducts = g.Count(p => p.Discontinued)7. };语句描述:Linq使⽤Group By和Count得到每个CategoryID中断货产品的数量。
说明:先按CategoryID归类,取出CategoryID值和各个分类产品的断货数量。
Count函数⾥,使⽤了Lambda表达式,Lambda表达式中的p,代表这个组⾥的⼀个元素或对象,即某⼀个产品。
3.Where限制1. var q =2. from p in db.Products3. group p by p.CategoryID into g4. where g.Count() >= 105. select new {6. g.Key,7. ProductCount = g.Count()8. };语句描述:根据产品的―ID分组,查询产品数量⼤于10的ID和产品数量。
c#中LINQ的基本用法实例

c#中LINQ的基本⽤法实例⼀、什么是LINQLINQ(读⾳link)代表语⾔集成查询(Language Integrated Query),是.NEt框架的扩展,它允许我们⽤SQL查询数据库的⽅式来查询数据的集合,使⽤它,你可以从数据库、程序对象的集合以及XML⽂档中查询数据下⾯⼀个简单的⽰例,可以查询数组中⼩于8的数字并输出。
⼀般步骤:获取数据源、创建查询、执⾏查询。
需要注意的是,尽管查询在语句中定义,但直到最后的foreach语句请求其结果的时候才会执⾏using System;using System.Collections.Generic;using System.Linq;namespace LINK查询{class Program{static void Main(string[] args){int[] number = { 2, 4, 6, 8, 10 }; //获取数据源IEnumerable<int> lowNum = from n in number //创建并存储查询,不会执⾏操作where n < 8select n;foreach(var val in lowNum) //执⾏查询{Console.Write("{0} ", val);}Console.ReadKey();}}}⼆、查询表达式的结构查询表达式由查询体后的from⼦句组成,其⼦句必须按⼀定的顺序出现,并且from⼦句和select⼦句这两部分是必须的。
先介绍⼀下⼦句2.1 from⼦句from⼦句指定了要作为数据源使⽤的数据集合,它的语法是:from Type Item in Items其中Type是集合中元素的类型,是可选的,因为编译器可以从集合来推断类型。
Item是迭代变量的名字。
Items是要查询的集合的名字,必须是可枚举类型的它和foreach⽐较相似,但foreach语句在遇到代码时就执⾏其主体,⼆from⼦句什么也不执⾏。
C#使用LINQ查询教程

21.1 LINQ查询概述LINQ可以对多种数据源和对象进行查询,如数据库、数据集、XML文档甚至是数组,这在传统的查询语句中是很难实现的。
如果有一个集合类型的值需要进行查询,则必须使用Where等方法进行遍历,而使用LINQ可以仿真SQL语句的形式进行查询,极大的降低了难度。
21.1.1 准备数据源既然LINQ可以查询多种数据源和对象,这些对象可能是数组,可能是数据集,也可能是数据库,那么在使用LINQ进行数据查询时首先需要准备数据源。
1.数组数组中的数据可以被LINQ查询语句查询,这样就省去了复杂的数组遍历。
数组数据源示例代码如下所示。
string[] str = { "学习", "学习LINQ", "好好学习", "生活很美好" };int[] inter = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };数组可以看成是一个集合,虽然数组没有集合的一些特性,但是从另一个角度上来说可以看成是一个集合。
在传统的开发过程中,如果要筛选其中包含“学习”字段的某个字符串,则需要遍历整个数组。
2.SQL Server在数据库操作中,同样可以使用LINQ进行数据库查询。
LINQ以其优雅的语法和面向对象的思想能够方便的进行数据库操作,为了使用LINQ进行SQL Server数据库查询,可以创建两个表,这两个表的结构如下所示。
Student(学生表):❑S_ID:学生ID。
❑S_NAME:学生姓名。
❑S_CLASS:学生班级。
❑C_ID:所在班级的ID。
上述结构描述了一个学生表,可以使用SQL语句创建学生表,示例代码如下所示。
USE [student]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[Student]([S_ID] [int] IDENTITY(1,1) NOT NULL,[S_NAME] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,[S_CLASS] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,[C_ID] [int] NULL,CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED([S_ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]为了更加详细的描述一个学生所有的基本信息,就需要创建另一个表对该学生所在的班级进行描述,班级表结构如下所示。
第4章 LINQ查询大全

第 4 章 LINQ 查询基础
IQueryable<T>的对象,可以对它进行枚举,遍历每一个元素。此外,它的元素可 以是任何数据类型,所以可以表示任何数据的集合。 目标数据:数据源中的元素并不定是查询所需要的结果。例如,对于一个学生信 息集合中,查询 A 只是查询学生的姓名,查询 B 要查询学生的姓名和各科成绩, 查询 C 则需要学生各科成绩的总分(需要另外计算),而不是原始数据中的各科 成绩。目标数据用来指定查询的具体想要的是什么数据。在 LINQ 中,它定义了 查询结果数据集中元素的具体类型。 筛选条件:筛选条件定义了对数据源中元素的过滤条件。只有满足条件的元素才 作为查询结果返回。筛选条件可以是简单的逻辑表达式表示,也可以用具有复杂 逻辑的函数来表示。 附加操作:附加操作表示一些其他的具体操作。比如,对查询结果进行排序、计 算查询结果的最值和求和、对查询结果进行分组等。 其中,数据源和目标数据是 LINQ 查询的必备元素,筛选条件和附加操作是可选元素。 比如,示例代码 4-1 中的查询 query1 就只包含了数据源和目标数据两个必备元素。本章后 面的章节将进一步介绍 LINQ 查询的具体使用方法。
通常,针对数据的查询是用简单的字符串文本来编写的查询语句,比如传统的 SQL 查 询语句,没有编译时的类型检查,安全性、方便性都不好。此外,开发人员还需要为不同 的数据源学习不同的数据查询语言,比如,查询 SQL 数据库的 T-SQL、查询 XML 数据的 DOM 结构等。
为了解决上面的问题,微软在.NET 3.5 版中推出一项具有突破性的新特性——语言集 成查询(LINQ)。LINQ 是 Language Integrate Query 的缩写,它在对象和数据之间建立一 种对应关系,可以使用访问内存对象的方式查询数据集合。LINQ 使查询成为 C#中的一种 语言构造。开发人员可以在 C#代码中嵌套类似于 SQL 语句的查询表达式,从而实现数据 查询的功能。
使用LINQ操作SQL Server数据库

info.Email = tbEmail.Text;
info.Message = tbMessage.Text; //执行添加
lqDB.Leaveword.InsertOnSubmit(info);
lqDB.SubmitChanges();
使用LINQ执行操作数据库(3)
3.修改数据库中的数据
LinqDBDataContext lqDB = new LinqDBDataContext(ConfigurationManager.ConnectionStrings["db_A SPNETConnectionString"].ConnectionString.ToString()); var result = from r in lqDB.Leaveword where r.id == 1 select r;
//查询要删除的记录
var result = from r in lqDB.Leaveword where r.id == 1
select r;
//删除数据,并提交到数据库中 lqDB.Leaveword.DeleteAllOnSubmit(result); lqDB.SubmitChanges();
select r;
GridView1.DataSource = result; GridView1.DataBind();
使用LINQ执行操作数据库(2)
2.向数据库中添加数据
LinqDBDataContext lqDB = new LinqDBDataContext(ConfigurationManager.ConnectionStrings["db_A SPNETConnectionString"].ConnectionString.ToString()); Leaveword info = new Leaveword(); //要添加的内容 info.Title = tbTitle.Text;
Linq基础+Lambda表达式对数据库的增删改及简单查询

Linq基础+Lambda表达式对数据库的增删改及简单查询⼀、Linq to sql 类⾼集成化的数据库访问技术使⽤Linq可以代替之前的,省去了⾃⼰敲代码的实体类和数据访问类的⼤量⼯作实体类:添加⼀个Linq to sql 类 ----选择要使⽤的数据库---- 拖⼊要使⽤的表需要⽴即保存就相当于创建实体类如果进⾏属性扩展,在App_Code下添加类,类名同表名⼀致。
将该类在访问修饰符后加上partial,将该类定为实体类的⼀部分数据访问类:不⽤在App_Code下再建数据访问类了。
直接在使⽤数据访问类的地⽅⽤数据库上下⽂进⾏编写。
ers.ToList(); //是将Users表转化为⼀个泛型集合。
也就相当于查询全部的⽅法⼆、利⽤Linq对数据库进⾏相关操作1、添加数据每⼀条数据都是⼀个实体类对象。
先将其实例化出来,再给对象的每个属性赋值。
在数据访问类中进⾏添加数据操作添加的⽅法:ers.InsertOnSumbit(对象);⽅法执⾏结束后提交对数据库的更改:con.SubmitChanges();2、删除数据删除数据前要先查到这条数据再进⾏删除操作通过ids进⾏查询这条数据返回⼀个对象Users u = ers.Where(r=>r.ids.Tostring()==ids).FirstOrDefault();where括号内接的是Lambda表达式,r代表⼀个Users对象,=>是基本格式,FirstOrDefault()返回第⼀条数据或者返还空如果u不是空,则在数据访问类中进⾏删除。
ers.DeleteOnSubmit(对象);con.SubmitChanges();3、数据修改数据的修改同样也是需要先查到这条数据,将返回的这个对象的要修改的属性进⾏重新赋值最后con.SubmitChanges();4、简单数据查询直接在数据访问类中根据对象的属性进⾏查询,多个查询条件中间⽤ && 连接;如 ers.Where(r=>erName=="zhangsan" && r.PassWord=="123").FirstOrDefault();。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实例28、创建LINQ TO sql的步骤:1)建立windows 窗体应用项目文件2)选择'项目\添加新项'菜单,在类别中选择'常用项',在'模板'视图中选择'LINQ to sql '类,系统自动添加用户命名的LINQ to SQL 文件(dataclasses1.dbml)3)选择'视图\服务器资源管理器'菜单,拖动数据链接的表或者视图节点到LINQ to SQL 的对象关系设计器设计视图的左边的一个窗格,系统将自动添加数据表。
4)选择'生成\生成myform'菜单,然后选择'数据\显示数据源'菜单,弹出'数据源'窗口,单击'添加新数据源'超级链接,弹出'数据源配置向导'对话框。
5)在'数据源配置向导(选择数据源类型)'对话框的'应用程序从哪里获取数据?'列表视图中选择'对象',再单击'下一步',弹出'数据源配置向导(选择希望绑定到的对象)'对话框,在对话框的'对象位于哪个程序集中?(如果没有出现,请取消该向导,然后重现生成包含对象的项目)'的树视图中选择数据表节点(比如gsyproduct表),再单击'下一步',弹出'数据源配置向导(添加对象数据源)'对话框,在对话框中单击'完成'按钮,则会在'数据源'窗口中显示数选择的数据表(比如gsyproduct )的字段信息。
6)在'数据源'窗口中拖动'gsyproduct'节点到应用程序窗体'Form1.vb(设计)'视图,系统将自动添加相关的数据控件gsyproductbindingsource、gsyproductbindingnavigator、gsyproductdatagridview等。
7)使用鼠标双击'应用程序窗体Form1.vb(设计)'视图,系统将自动添加代码框架,在load事件处理代码框架中添加如下实现代码:public class form1private MyDataContext as New Dataclasses1DataContext()'设置控件数据源private sub Form1_load(ByVal sender as System.Object, ByVal e asSystem.EventArgs ) Handles MyBase.LoadMe.gsyproductbindingsource.DataSource=MyDataContext.gsyproduct End SubEnd Class8)更改视图标签:在'解决方案资源管理器'窗口中打开应用程序窗体'Form 1.vb(设计)'视图,鼠标右键单击'gsyproductbindingNavigator'控件中的'bindingNavigatorMoveFirstItem'按钮,在弹出的浮动菜单中选择'插入\label'菜单项,系统自动在gsyproductBindingNavigator控件中添加一个'ToolStripLabel'控件(ToolStripLabel1),然后用同样的方法在gsyproductBindingNavigator控件中添加一个ToolStripTextBox控件(ToolStripTextBox1)和ToolStripButton 控件(ToolStripButton1)。
在'属性'窗口中设置ToolStripLabel1的text属性为'商品代码:',设置ToolStripTextBox1的text属性为'00001601',设置ToolStripButton1的text属性为'查询',DisplayStyle属性为'ImageAndText'。
属性设置完成后,直接在'Form1.vb(设计)'视图中双击ToolStripButton1,修改其click事件代码可以实现互动查询:'查询记录private sub ToolStripButton1_Click(ByVal sender as System.Object,ByVal e as System.EventArgs ) Handles ToolStripButton1.clickDim Mytext =Me.ToolStripTextBox1.textDim MyQuery =From gsyproduct In MyDataContext.gsyproduct where gsyproduct.pro_id =Mytext select gsyproductMe.gsyproductBindingSource.DataSource =MyQueryEnd Sub实例29、如何重置LINQ to SQL类的默认方法实例程序使用自定义存储过程重置LINQ to SQL类的Insert(插入)默认方法的主要步骤如下:1)建立windows 窗体应用项目文件2)选择'项目\添加新项'菜单,在类别中选择'常用项',在'模板'视图中选择'LINQ to sql '类,系统自动添加用户命名的LINQ to SQL 文件(dataclasses1.dbml)3)选择'视图\服务器资源管理器'菜单,拖动数据链接的表或者视图节点到LINQ to SQL 的对象关系设计器设计视图的左边的一个窗格,系统将自动添加数据表。
4)选择'生成\生成myform'菜单,然后选择'数据\显示数据源'菜单,弹出'数据源'窗口,单击'添加新数据源'超级链接,弹出'数据源配置向导'对话框。
5)在'数据源配置向导(选择数据源类型)'对话框的'应用程序从哪里获取数据?'列表视图中选择'对象',再单击'下一步',弹出'数据源配置向导(选择希望绑定到的对象)'对话框,在对话框的'对象位于哪个程序集中?(如果没有出现,请取消该向导,然后重现生成包含对象的项目)'的树视图中选择数据表节点(比如Customers表),再单击'下一步',弹出'数据源配置向导(添加对象数据源)'对话框,在对话框中单击'完成'按钮,则会在'数据源'窗口中显示选择的数据表(比如Customers数据表)的字段信息。
6)在'数据源'窗口中拖动Customers节点到应用程序窗体'Form1.vb(设计)'视图,系统将自动添加相关的数据控件Customersbindingsource、Customersbindingnavigator、Customersdatagridview等。
7)使用鼠标双击'应用程序窗体Form1.vb(设计)'视图,系统将自动添加代码框架,在load事件处理代码框架中添加如下实现代码:public class form1private MyDataContext as New Dataclasses1DataContext()'设置控件数据源private sub Form1_load(ByVal sender as System.Object, ByVal e asSystem.EventArgs ) Handles MyBase.LoadMe.Customersbindingsource.DataSource=MyDataContext.Customers End SubEnd Class8)在应用窗体'Form1.vb (设计)'视图中选择CustomersBindingNavigator控件上的CustomersBindingNavigatorSaveItem按钮(保存按钮),在属性窗口设置Enabled 为true,双击CustomersBindingNavigatorSaveItem按钮,修改其click事件过程代码:'保存对数据库记录的插入、删除和修改操作结果private Sub CustomersBindingNavigatorSaveItem_click(ByVal sender as System.Object, ByVal e as System.EventArgs) handles CustomersBindingNavigatorSaveItem.clickTryMyDataContext.SubmitChanges()MessageBox.Show("已经成功保存了数据库记录更新操作结果!","信息提示",MessageBoxButtons.OK,rmation)Me. CustomersBindingSource.clear()MyDataContext =New Dataclasses1DataContext()Me.CustomersBindingSource.DataSource =MyDataContext.CustomersCatch ex as ExceptionMessageBox.Show(ex.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Error)End TryEnd Sub9)上述步骤使Dataclasses1DataContext已经具备默认的对数据库记录进行插入、删除和修改的管理能力。
10)修改Dataclasses1DataContext类的Insert默认操作步骤:在VS2010中选择“视图/服务器资源管理”菜单,则会弹出【服务器资源管理器】窗口,在此窗口中展开“数据连接\idcjomh\gsysql.Northwind.dbo\存储过程”节点,然后使用鼠标右键点击“存储过程”节点,在弹出的浮动菜单中选择“添加新存储过程”菜单项,系统新建的“dbo.StoredProcedure1”页面中输入该存储过程的SQL脚本命令,内容如下:ALTER PROCEDURE dbo.MyInsertCustomersStoredProcedure@CustomerId nchar(5),@CompanyName nvarchar(40),@ContactName nvarchar(30),@ContactTitle nvarchar(30),@Address nvarchar(60),@City nvarchar(15),@Region nvarchar(60),@PostalCode nvarchar(10),@Country nvarchar(15),@Phone nvarchar(24),@Fax nvarchar(24)ASset NOCOUNT off;insert into[dbo].[Customers](CustomerID,CompanyName,ContactName,ContactTitle, Address,City,Region,PostalCode,Country,Phone,Fax)values(@CustomerID,@CompanyName,@ContactName,@ContactTitle,@Addre ss,@City,@Region,@PostalCode,@Country,@Phone,@Fax);selectCustomerID,CompanyName,Contactname,contacttitle,address,city,region,postalcode, country,phone,fax from customers where (customerid=@customerid)RETURN11)完成对MyInsertCustomersStoredProcedure存储过程的SQL脚本编辑后,按下Ctrl +S保存,则在NorthWind数据库中将新增一个存储过程(MyInsertCustomersStoredProcedure)12)在【解决方案资源管理器】窗口中双击“DataClasses1.dbml“文件,则会打开此文件的设计视图。