从本节开始,本文正式更名为C#3.0入门系列。先发布一则消息,VS2007 Beta版本已经发布咯,下载地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=1FF0B35D-0C4A-40B4-915A-5331E11C39E6&displaylang=en
大家快去下载呀,我也好和大家一起体验该版本最新功能呀。
dlinq也更名为linq to sql.本文也跟着做相应变化,稍候,我会去更新前面的文章。我们先接着讲linq的语法。
Select操作
最简单的

1,            var q =
                from c in db.Customers
                select c.ContactName;

匿名类的

1,            var q =
                from c in db.Customers
                select new {c.ContactName, c.Phone};
2,            var q =
                from e in db.Employees
                select new {Name = e.FirstName + " " + e.LastName, Phone = e.HomePhone};
3,            var q =
                from p in db.Products
                select new {p.ProductID, HalfPrice = p.UnitPrice / 2};

条件的

            var q =
                from p in db.Products
                select new {p.ProductName, Availability = p.UnitsInStock - p.UnitsOnOrder < 0 ? "Out Of Stock": "In Stock"};

这种条件的会被翻译成sql中{case when condition then else}的。
name type形式的:

            var q =
                from e in db.Employees                
                select new Name {FirstName = e.FirstName, LastName = e.LastName};

只所以是name type的,是因为Name类是已经定义好的,也就是说,你可以用这种方式,返回你需要类型的对象集.
shaped形式的:

            var q =
                from c in db.Customers
                select new {
                    c.CustomerID,
                    CompanyInfo = new {c.CompanyName, c.City, c.Country},
                    ContactInfo = new {c.ContactName, c.ContactTitle}
                };

该形式,其select操作使用了匿名对象,而这个匿名对象中,其属性也是个匿名对象。
nested形式的:

            var q =
                from o in db.Orders
                select new {
                    o.OrderID,
                    DiscountedProducts =
                        from od in o.OrderDetails
                        where od.Discount > 0.0
                        select od,
                    FreeShippingDiscount = o.Freight
                };

其返回的对象集中的每个对象DiscountedProducts属性中,又包含一个小的集合。也就是每个对象也是一个集合类。
Distinct形式的:

            var q = (
                from c in db.Customers
                select c.City )
                .Distinct();

该形式,筛选该字段中不相同的值。会被翻译为
select distinct city from customers

where操作:
最简单的

1,            var q =
                from c in db.Customers
                where c.City == "London"
                select c;

2,            var q =
                from e in db.Employees
                where e.HireDate >= new DateTime(1994, 1, 1)
                select e;

或与关系的where条件

1,            var q =
                from p in db.Products
                where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued
                select p;
2,            var q =
                from p in db.Products
                where p.UnitPrice > 10m || p.Discontinued
                select p;
3,            var q =
                db.Products.Where(p=>p.UnitPrice > 10m).Where(p=>p.Discontinued);

在上例中,1和2语句先被翻译成类似3语句的形式,再被翻译成sql语句,送回数据服务器。他们基本上一样的。
欠套在first操作中的where条件:
first操作,其实质就是在sql语句前,加了一个top 1.

1,            Customer cust = db.Customers.First(c => c.CustomerID == "BONAP");
2            Order ord = db.Orders.First(o => o.Freight > 10.00M);

第一个例子,是筛选customerid为"BONAP"的客户,第二个筛选订单运费大于10的订单。First操作必须用这种级连的形式。比如

Shipper shipper = db.Shippers.First();

也可以把linq的expression和级连的形式混合使用,比如第一个例子,加入first操作,

            var q =
                (from c in db.Customers
                where c.City == "London"
                select c).First();

如果加入first操作,其返回是一个具体的对象,而不是一个集合。如果first操作没有条件,它只是简单的在sql语句中添加top 1,如果有条件,它在翻译时,就会加入条件语句。

TrackBack:http://www.cnblogs.com/126/archive/2007/01/28/632454.html

转载于:https://www.cnblogs.com/hdjjun/archive/2008/11/05/1327183.html

C#3.0入门系列(五)-之Where操作相关推荐

  1. C# 3.0入门系列

    目录导航 1 C# 3.0 入门系列(一) 从linq开始引C# 3.0. 2 C# 3.0入门系列(二) 数据库的准备,引入Linq To Sql的准备. 3 C# 3.0入门系列(三) 第一个Li ...

  2. 小猪的C语言快速入门系列(五)

    小猪的C语言快速入门系列(五) 标签: C语言 本节引言: 上一节我们C语言 复合数据类型 中的 数组 进行了解读,本节我们会继续来学习 复合数据类型中的 指针,指针可是C语言的灵魂:利用指针可以表示 ...

  3. WF4.0入门系列1——创建一个简单的工作流

    WF4.0入门系列1--创建一个简单的工作流 打开VS2010,选择文件-新建-项目,选择Workflow项 工作流台应用程序,在名称处输入chapter01,选择合适的位置,这里默认,单击确定. V ...

  4. 【转】C#3.0入门系列(九)-之GroupBy操作

    原文:http://www.cnblogs.com/126/archive/2007/07/10/812621.html 有朋友反馈说我提供的sample不能编译.大概是版本的问题,可以到http:/ ...

  5. C# 3.0入门系列(三)

    从本节开始,笔者将会和大家一起开始体验dlinq了.前面我们准备了数据库,也对数据库之间的关系做了初步的了解.有了数据库之后,数据和对象是一个什么样的关系呢?从dlinq的设计来看,它主要是为了解决d ...

  6. 零基础数据挖掘入门系列(五) - 模型建立与调参

    思维导图:零基础入门数据挖掘的学习路径 1. 写在前面 零基础入门数据挖掘是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知识, ...

  7. C# 3.0 入门系列(一)

    谈到dlinq,就不得不先说linq.让我们先看看什么是linq.linq是 Language Integrated Query的缩写.那么事实上dlinq就是 Database Language I ...

  8. C# 3.0入门系列(二)

    在第一篇中,我已经和大家简单介绍了linq.也和大家提起linq是C# 3.0里的一个特性.不过,你去装linq priview时,你会发现,它提供了许多vb的linq代码.从现在的情况看,linq会 ...

  9. Vue 2.0 入门系列(15)学习 Vue.js 需要掌握的 es6 (2)

    类与模块 类 es6 之前,通常使用构造函数来创建对象 // 构造函数 User function User(username, email) { this.username = username; ...

最新文章

  1. getchar getche getch的区别
  2. image和TFRecord互相转换
  3. 【Python】干货分享 | Pandas处理时间序列的数据
  4. 七十九、TodoList示例 深入Redux的工作流
  5. bitmap 转byte[]后读取_闲谈redis的bitmap
  6. 机动车驾驶人科目三考试项目及合格标准
  7. C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper(三:附源码)...
  8. Ubuntu su root提示输入密码 怎么输入都不对
  9. 自制试题(逻辑思维训练500题)
  10. 常见的激励函数和损失函数
  11. 2020年全球及中国电源管理芯片(PMIC)行业发展现状及市场竞争格局分析,全球市场集中,德州仪器市占第一「图」
  12. 孙悟空的师傅的真实身份
  13. it行业java_转行IT行业前景怎么样 为什么要选择Java开发
  14. 轻量级日志系统 PLG(**Promtail + Loki + Grafana**)架构技术调研
  15. 面向对象与面向过程的区别与联系
  16. vim快捷键(一)查找与替换
  17. linux的内存占用分析,Linux 内存占用分析
  18. 输入一行字符,分别统计出包含英文字母、空格、数字
  19. 防雷接地电阻值标准及其规范要求
  20. 用计算机汇编语言的程序是经过,汇编语言程序

热门文章

  1. 怎么交换两个字符串_leetcode1202_go_交换字符串中的元素
  2. c语言实现python列表_C语言实现的Python扩展模块
  3. c语言运动会成绩统计报告,C语言程序设计运动会成绩统计系统1研究报告.doc
  4. python添加excel模块_python操作Excel模块openpyxl
  5. linux 信号软中断的方式
  6. 关于虚拟机的三种网络接口模式(以VXBOX虚拟机为例)
  7. python 多条件 选择 算法_Python 子集的算法优化; 找寻一个list的所有满足特定条件的子集...
  8. 桂林哪些职校可以学计算机,桂林市有几个中等职业学校
  9. 调整分区个数_2T移动硬盘分区办法
  10. 【 MATLAB 】协方差 cov以及协方差矩阵基础知识