LINQ
文章平均质量分 65
光脚丫思考
性别为非女,年龄二十有三。兴趣是计算机和其他若干!
EMAIL:524130780@QQ.COM
展开
-
LINQ之Where
<br />适用场景:实现过滤,查询等功能。<br />说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句。<br />Where操作包括3种形式,分别为简单形式、关系条件形式、First()形式。下面分别用实例举例下:1.简单形式:<br />例如:使用where筛选在伦敦的客户var q = from c in db.Customers where c.City == "London" select c;<br />再转载 2010-06-30 14:15:00 · 1495 阅读 · 0 评论 -
LINQ之Min
Min<br />说明:返回集合中元素的最小值;不延迟。生成SQL语句为:SELECT MIN(…) FROM 1.简单形式:<br />查找任意产品的最低单价:var q = db.Products.Select(p => p.UnitPrice).Min();2.映射形式:<br />查找任意订单的最低运费:var q = db.Orders.Min(o => o.Freight);3.元素:<br />查找每个类别中单价最低的产品:var categories = from p in db.转载 2010-06-30 14:20:00 · 1797 阅读 · 0 评论 -
LINQ之Max
Max<br />说明:返回集合中元素的最大值;不延迟。生成SQL语句为:SELECT MAX(…) FROM1.简单形式:<br />查找任意雇员的最近雇用日期:var q = db.Employees.Select(e => e.HireDate).Max();2.映射形式:<br />查找任意产品的最大库存量:var q = db.Products.Max(p => p.UnitsInStock);3.元素:<br />查找每个类别中单价最高的产品:var categories = from转载 2010-06-30 14:21:00 · 10204 阅读 · 2 评论 -
LINQ之Aggregate
Aggregate<br />说明:根据输入的表达式获取聚合值;不延迟。即是说:用一个种子值与当前元素通过指定的函数来进行对比来遍历集合中的元素,符合条件的元素保留下来。如果没有指定种子值的话,种子值默认为集合的第一个元素。<br />下面用一个表格总结一下这篇说的LINQ to SQL语句Where过滤;延迟Select选择;延迟Distinct查询不重复的结果集;延迟Count返回集合中的元素个数,返回INT类型;不延迟LongCount返回集合中的元素个数,返回LONG类型;不延迟Sum返回集合中数值转载 2010-06-30 14:22:00 · 2699 阅读 · 0 评论 -
LINQ之Order By
Order By操作<br />适用场景:对查询出的语句进行排序,比如按时间排序等等。<br />说明:按指定表达式对集合排序;延迟,:按指定表达式对集合排序;延迟,默认是升序,加上descending表示降序,对应的扩展方法是OrderBy和OrderByDescending1.简单形式<br />这个例子使用 orderby 按雇用日期对雇员进行排序:var q = from e in db.Employees orderby e.HireDate select e;<br转载 2010-06-30 14:24:00 · 1815 阅读 · 0 评论 -
LINQ之Count
c<br />说明:返回集合中的元素个数,返回INT类型;不延迟。生成SQL语句为:SELECT COUNT(*) FROM 1.简单形式:<br />得到数据库中客户的数量:var q = db.Customers.Count();2.带条件形式:<br />得到数据库中未断货产品的数量:var q = db.Products.Count(p => !p.Discontinued);转载 2010-06-30 14:18:00 · 10612 阅读 · 0 评论 -
LINQ之Sum
Sum<br />说明:返回集合中数值类型元素之和,集合应为INT类型集合;不延迟。生成SQL语句为:SELECT SUM(…) FROM 1.简单形式:<br />得到所有订单的总运费:var q = db.Orders.Select(o => o.Freight).Sum();2.映射形式:<br />得到所有产品的订货总数:var q = db.Products.Sum(p => p.UnitsOnOrder);转载 2010-06-30 14:19:00 · 11060 阅读 · 0 评论 -
查询表达式(LINQ)简介
<br />在上两篇我介绍了C#3.0新语特性和改进,这些新特性在我们编写程序时为我们提供了非常大的帮助。从这篇开始,我们开始一起来探讨LINQ。<br />LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好处。并且它同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源。<br />LINQ定义了一组标准查询操作符用转载 2010-06-30 14:14:00 · 1403 阅读 · 0 评论 -
LINQ之Select、Distinct
<br />上一篇讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ to SQL语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects、LINQ to DataSets、LINQ to SQL、LINQ to Entities、LINQ to XML,但是相对来说LINQ to SQL在我们程序中使用最多,毕竟所有的数据都要在数据库运行着各种操作。所以先来学习LINQ to SQL,其它的都差不多了,那么就从Select说起吧,这个在编写程序中也最为常用。转载 2010-06-30 14:17:00 · 2446 阅读 · 0 评论 -
LINQ之LongCount
LongCount<br />说明:返回集合中的元素个数,返回LONG类型;不延迟。对于元素个数较多的集合可视情况可以选用LongCount来统计元素个数,它返回long类型,比较精确。生成SQL语句为:SELECT COUNT_BIG(*) FROM var q = db.Customers.LongCount();转载 2010-06-30 14:19:00 · 1774 阅读 · 0 评论 -
LINQ之Average
Average<br />说明:返回集合中的数值类型元素的平均值。集合应为数字类型集合,其返回值类型为double;不延迟。生成SQL语句为:SELECT AVG(…) FROM1.简单形式:<br />得到所有订单的平均运费:var q = db.Orders.Select(o => o.Freight).Average();2.映射形式:<br />得到所有产品的平均单价:var q = db.Products.Average(p => p.UnitPrice);3.元素:<br />查找每个类别中单价转载 2010-06-30 14:21:00 · 2423 阅读 · 0 评论 -
LINQ之Join
<br />适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等。对各个表之间的关系,就用这些实现对多个表的操作。<br />说明:在Join操作中,分别为Join(Join查询), SelectMany(Select一对多选择)和GroupJoin(分组Join查询)。<br />该扩展方法对两个序列中键匹配的元素进行inner join操作SelectMany<br />说明:我们在写查询语句时,如果被翻译成SelectMany需要满足2个条件。1:查询语句中没有join和into,2:必须出转载 2010-06-30 14:23:00 · 4400 阅读 · 0 评论 -
LINQ之Delete
1.简单形式<br />说明:调用DeleteOnSubmit方法即可。OrderDetail orderDetail = db.OrderDetails.First (c => c.OrderID == 10255 && c.ProductID == 36);db.OrderDetails.DeleteOnSubmit(orderDetail);db.SubmitChanges();<br />语句描述:使用DeleteOnSubmit方法从OrderDetail 表中删除Or转载 2010-07-02 14:58:00 · 3744 阅读 · 0 评论 -
LINQ之使用Attach更新(Update with Attach)
<br />说明:在对于在不同的DataContext之间,使用Attach方法来更新数据。例如在一个名为tempdb的NorthwindDataContext中,查询出Customer和Order,在另一个NorthwindDataContext中,Customer的地址更新为123 First Ave,Order的CustomerID 更新为CHOPS。//通常,通过从其他层反序列化 XML 来获取要附加的实体//不支持将实体从一个DataContext附加到另一个DataContext//因此若要复制转载 2010-07-02 15:08:00 · 2993 阅读 · 0 评论 -
LINQ之对象标识
运行库中的对象具有唯一标识。引用同一对象的两个变量实际上是引用此对象的同一实例。你更改一个变量后,可以通过另一个变量看到这些更改。 关系数据库表中的行不具有唯一标识。由于每一行都具有唯一的主键,因此任何两行都不会共用同一键值。 <br />实际上,通常我们是将数据从数据库中提取出来放入另一层中,应用程序在该层对数据进行处理。这就是 LINQ to SQL 支持的模型。将数据作为行从数据库中提取出来时,你不期望表示相同数据的两行实际上对应于相同的行实例。如果您查询特定客户两次,您将获得两行数据。每一行包含相同转载 2010-07-02 15:29:00 · 1439 阅读 · 0 评论 -
LINQ之运算符转换
1.AsEnumerable:将类型转换为泛型 IEnumerable <br />使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数。在此示例中,LINQ to SQL(使用默认泛型 Query)会尝试将查询转换为 SQL 并在服务器上执行。但 where 子句引用用户定义的客户端方法 (isValidProduct),此方法无法转换为 SQL。<br />解决方法是指定 where 的客户端泛型 IEnumerable<T> 实现以替换泛型 IQuery转载 2010-07-02 15:38:00 · 1371 阅读 · 0 评论 -
LINQ to SQL与ADO.NET
<br />LINQ to SQL 基于由 ADO.NET 提供程序模型提供的服务。因此,我们可以将 LINQ to SQL 代码与现有的 ADO.NET 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to SQL。 <br /> 1.连接 <br />在创建 LINQ to SQL DataContext 时,可以提供现有 ADO.NET 连接。对 DataContext 的所有操作(包括查询)都使用所提供的这个连接。如果此连接已经打开,则在您使用完此连接时,LINQ to SQL转载 2010-07-02 15:42:00 · 1347 阅读 · 1 评论 -
LINQ之Insert
插入(Insert)1.简单形式<br />说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提交到数据库。NorthwindDataContext db = new NorthwindDataContext();var newCustomer = new Customer{ CustomerID = "MCSFT", CompanyName = "Microsoft", ContactName = "J转载 2010-07-02 14:52:00 · 1921 阅读 · 0 评论 -
LINQ之开放式并发控制和事务
<br />今天简单的学习下开放式并发控制和事务的内容,具体详细的内容现在可以参看MSDN了。Simultaneous Changes开放式并发控制<br />下表介绍 LINQ to SQL 文档中涉及开放式并发的术语: 术语 说明 并发 两个或更多用户同时尝试更新同一数据库行的情形。 并发冲突 两个或更多用户同时尝试向一行的一列或多列提交冲突值的情形。 并发控制 用于解决并发冲突的技术。 开放式并发控制 先调查其他事务是否已更改了行中的值,再允许提交更改的技术。相比之下,保守式并发控制则是通过锁定记录来转载 2010-07-02 15:17:00 · 1321 阅读 · 0 评论 -
LINQ之Null
<br />说明:下面第一个例子说明查询ReportsToEmployee为null的雇员。第二个例子使用Nullable<T>.HasValue查询雇员,其结果与第一个例子相同。在第三个例子中,使用Nullable<T>.Value来返回ReportsToEmployee不为null的雇员的ReportsTo的值。1.Null<br />查找不隶属于另一个雇员的所有雇员:var q = from e in db.Employees where e.ReportsToEmployee =转载 2010-07-02 15:21:00 · 1801 阅读 · 0 评论 -
LINQ之String
<br />LINQ to SQL支持以下String方法。但是不同的是默认情况下System.String 方法区分大小写。而SQL则不区分大小写。1.字符串串联(String Concatenation)var q = from c in db.Customers select new { c.CustomerID, Location = c.City + ", " + c.Country };<br />语句描述:这个例子使用转载 2010-07-02 15:22:00 · 3994 阅读 · 0 评论 -
LINQ之对象加载
延迟加载<br />在查询某对象时,实际上你只查询该对象。不会同时自动获取这个对象。这就是延迟加载。<br />例如,您可能需要查看客户数据和订单数据。你最初不一定需要检索与每个客户有关的所有订单数据。其优点是你可以使用延迟加载将额外信息的检索操作延迟到你确实需要检索它们时再进行。请看下面的示例:检索出来CustomerID,就根据这个ID查询出OrderID。var custs = from c in db.Customers where c.City == "Sao Paulo"转载 2010-07-02 15:34:00 · 1358 阅读 · 0 评论 -
LINQ之Update
<br />说明:更新操作,先获取对象,进行修改操作之后,直接调用SubmitChanges()方法即可提交。注意,这里是在同一个DataContext中,对于不同的DataContex看下面的讲解。1.简单形式Customer cust = db.Customers.First(c => c.CustomerID == "ALFKI");cust.ContactTitle = "Vice President";db.SubmitChanges();<br />语句描述:使用SubmitC转载 2010-07-02 14:55:00 · 2019 阅读 · 0 评论 -
LINQ之日期函数
<br />LINQ to SQL支持以下DateTime方法。但是,SQL Server和CLR的DateTime类型在范围和计时周期精度上不同,如下表。<br /><br />类型<br />最小值<br />最大值<br />计时周期<br />System.DateTime<br />0001 年 1 月 1 日<br />9999 年 12 月 31 日<br />100 毫微秒(0.0000001 秒)<br />T-SQL DateTime<br />1753 年 1 月 1 日<br />9转载 2010-07-02 15:24:00 · 2988 阅读 · 0 评论 -
LINQ简介
<br />语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中引入的一项创新功能,它在对象领域和数据领域之间架起了一座桥梁。<br />传统上,针对数据的查询都是以简单的字符串表示,而没有编译时类型检查或 IntelliSense 支持。此外,您还必须针对以下各种数据源学习一种不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等等。LINQ 使查询成为 C# 和 Visual Basic 中的一流语言构造。您可以使用语言关键字和转载 2010-07-17 15:40:00 · 1592 阅读 · 0 评论 -
LINQ 查询简介(C#)
查询是一种从数据源检索数据的表达式。查询通常用专门的查询语言来表示。随着时间的推移,人们已经为各种数据源开发了不同的语言;例如,用于关系数据库的 SQL 和用于 XML 的 XQuery。因此,开发人员不得不针对他们必须支持的每种数据源或数据格式而学习新的查询语言。LINQ 通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了这一情况。在 LINQ 查询中,始终会用到对象。可以使用相同的基本编码模式来查询和转换 XML 文档、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有转载 2010-07-17 15:53:00 · 1398 阅读 · 0 评论 -
LINQ和泛型类型(C#)
<br />LINQ 查询基于泛型类型,在 .NET Framework 的 2.0 版中引入了泛型类型。您无需深入了解泛型即可开始编写查询。但是,您可能需要了解两个基本概念:<br />当您创建泛型集合类(如 List<(Of <(T>)>))的实例时,您将“T”替换为列表将包含的对象的类型。例如,字符串列表表示为 List<string>,Customer 对象列表表示为 List<Customer>。泛型列表是强类型的,且提供了比将其元素存储为 Object 的集合更多的好处。如果您尝试将 Custo转载 2010-07-17 16:12:00 · 1801 阅读 · 0 评论 -
光脚丫学LINQ(001):获取数据源
本主题简要介绍 LINQ 查询表达式,以及您在查询中执行的一些典型类型的操作。下面各主题中提供了更详细的信息: 获取数据源在 LINQ 查询中,第一步是指定数据源。像在大多数编程语言中一样,在 C# 中,必须先声明变量,才能使用它。在 LINQ 查询中,最先使用from子句的目的是引入数据源 (customers) 和范围变量 (cust)。NorthwindDataContext db = newNorthwindDataContext();var AllCustomers = from Customer原创 2010-08-17 17:14:00 · 2255 阅读 · 0 评论 -
光脚丫学LINQ(003):排序结果集
<br />视频演示:http://u.115.com/file/f2e2959888<br /> <br />通常可以很方便地将返回的数据进行排序。orderby 子句将使返回的序列中的元素按照被排序的类型的默认比较器进行排序。例如,下面的查询可以扩展为按 Name 属性对结果进行排序。因为 Name 是一个字符串,所以默认比较器执行从 A 到 Z 的字母排序。<br />NorthwindDataContext db = new NorthwindDataContext();var London原创 2010-08-17 18:13:00 · 1144 阅读 · 0 评论 -
光脚丫学LINQ(006):投影
<br /> <br />视频演示:http://u.115.com/file/f21042d848<br /> <br />select 子句生成查询结果并指定每个返回的元素的“形状”或类型。例如,您可以指定结果包含的是整个 Customer 对象、仅一个成员、成员的子集,还是某个基于计算或新对象创建的完全不同的结果类型。当 select 子句生成除源元素副本以外的内容时,该操作称为“投影”。使用投影转换数据是 LINQ 查询表达式的一种强大功能。<br /> NorthwindDataContext d原创 2010-08-17 18:26:00 · 2382 阅读 · 0 评论 -
光脚丫学LINQ(008):将多个输入联接到一个输出序列
<br />视频演示:http://u.115.com/file/f2f372f454<br /> <br />可以使用 LINQ 查询来创建包含多个输入序列的元素的输出序列。下面的示例演示如何组合两个内存中的数据结构,但组合来自 XML 或 SQL 或数据集源的数据时可应用相同的原则。假定下面两种类类型:<br />public class Student{ public string FirstName { get; set; } public string LastName {原创 2010-08-19 17:54:00 · 1893 阅读 · 0 评论 -
光脚丫学LINQ(003):排序结果集
<br />视频演示:http://u.115.com/file/f2e2959888<br /> <br />通常可以很方便地将返回的数据进行排序。orderby 子句将使返回的序列中的元素按照被排序的类型的默认比较器进行排序。例如,下面的查询可以扩展为按 Name 属性对结果进行排序。因为 Name 是一个字符串,所以默认比较器执行从 A 到 Z 的字母排序。<br />NorthwindDataContext db = new NorthwindDataContext();var London原创 2010-08-17 18:16:00 · 1456 阅读 · 0 评论 -
光脚丫学LINQ(004):分组数据
<br /> <br />视频演示:http://u.115.com/file/f27504ff61<br /> <br />使用 group 子句,您可以按指定的键分组结果。例如,您可以指定结果应按 City 分组,以便位于伦敦或巴黎的所有客户位于各自组中。在本例中,Customer.City是键。<br />NorthwindDataContext db = new NorthwindDataContext();var AllCustomers = from Customer in db.Custo原创 2010-08-17 18:19:00 · 1818 阅读 · 0 评论 -
光脚丫学LINQ(007):使用LINQ进行数据转换(C#)
<br />视频演示:http://u.115.com/file/f2e6d30b81<br /> <br />语言集成查询 (LINQ) 不仅可用于检索数据,而且还是一个功能强大的数据转换工具。通过使用 LINQ 查询,您可以将源序列用作输入,并采用多种方式修改它以创建新输出序列。您可以通过排序和分组来修改序列本身,而不必修改元素本身。 但是,LINQ 查询最强大的功能可能在于它能够创建新类型。这一功能在 select 子句中实现。例如,可以执行下列任务:将多个输入序列合并到具有新类型的单个输出序列中。创原创 2010-08-19 17:52:00 · 2071 阅读 · 0 评论 -
光脚丫学LINQ系列演示
这是学习LINQ的时候,把那些我认为是重要的内容,做成了这样的视频演示。其他的演示视频会陆续上传的,另外关于演示中使用的文档也会在稍后上传的。以下是已经上传的演示列表:LINQ的入门演示001.获取数据源 视频演示002.筛选数据 视频演示003.排序结果集 视频演示004.分组数据 视频演示005.数据表之间的联接查询 视频演示006.投影 视频演示原创 2010-08-17 18:40:00 · 2546 阅读 · 6 评论 -
光脚丫学LINQ(002):筛选数据
<br />视频演示:http://u.115.com/file/f2cf72dc9e<br /> <br />也许最常用的查询操作是应用布尔表达式形式的筛选器。此筛选器使查询只返回那些表达式结果为 true 的元素。使用 where 子句生成结果。实际上,筛选器指定从源序列中排除哪些元素。在下面的示例中,只返回那些地址位于伦敦的 customers。<br />NorthwindDataContext db = new NorthwindDataContext();var LondonCustom原创 2010-08-17 18:10:00 · 1676 阅读 · 0 评论 -
光脚丫学LINQ(003):排序结果集
<br />视频演示:http://u.115.com/file/f2e2959888<br /> <br />通常可以很方便地将返回的数据进行排序。orderby 子句将使返回的序列中的元素按照被排序的类型的默认比较器进行排序。例如,下面的查询可以扩展为按 Name 属性对结果进行排序。因为 Name 是一个字符串,所以默认比较器执行从 A 到 Z 的字母排序。<br />NorthwindDataContext db = new NorthwindDataContext();var London原创 2010-08-17 18:14:00 · 863 阅读 · 0 评论 -
光脚丫学LINQ(005):数据表之间的联接查询
<br /> <br /> <br />视频演示:http://u.115.com/file/f29a440f67<br /> <br />联接运算创建数据源中没有显式建模的序列之间的关联。例如,您可以执行联接来查找符合以下条件的所有客户:位于巴黎,且从位于伦敦的供应商处订购产品。在 LINQ 中,join 子句始终针对对象集合而非直接针对数据库表运行。在 LINQ 中,您不必像在 SQL 中那样频繁使用 join,因为 LINQ 中的外键在对象模型中表示为包含项集合的属性。例如,Customer 对象包含原创 2010-08-17 18:21:00 · 1808 阅读 · 0 评论 -
光脚丫学LINQ(009):选择各个源元素的子集
<br />视频演示:http://u.115.com/file/f2d7193f3a<br /> <br />选择源序列中的各个元素的子集有两种主要方法:<br />1、若要只选择源元素的一个成员,请使用点运算。在下面的示例中,假定 Customer 对象包含几个公共属性,其中包括名为 City 的字符串。在执行此查询时,此查询将生成字符串输出序列。<br />NorthwindDataContext db = new NorthwindDataContext();var Cities = from原创 2010-08-19 17:59:00 · 2038 阅读 · 0 评论 -
光脚丫学LINQ(010):将内存中的对象转换为XML
<br />视频演示:http://u.115.com/file/f24db1fdfa<br /> <br />通过 LINQ 查询,可以轻松地在内存中的数据结构、SQL 数据库、ADO.NET 数据集和 XML 流或文档之间转换数据。下面的示例将内存中的数据结构中的对象转换为 XML 元素。<br />List<Student> Students = new List<Student>(){ new Student { FirstName="Svetlana",原创 2010-08-21 16:37:00 · 1415 阅读 · 0 评论