`
ljl_xyf
  • 浏览: 633986 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#3.0入门系列(LingQ)(五)-之Where操作

阅读更多

 

从本节开始,本文正式更名为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 类是已经定义好的,也就是说,你可以用这种方式,返回你需要类型的对象集(http://www.my400800.cn).
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();

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

        

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

 

 

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

 

分享到:
评论

相关推荐

    lingq-to-anki:从LingQ数据创建基于句子的Anki卡

    灵格至安基lingq-to-anki是一个简单的命令行实用程序,用于从LingQ中获取课程数据(课程文本,已保存的词汇和注释),并生成一个CSV文件,其中包含文本的每个句子以及相关的词汇和注释。要求Node.js 节点程序包管理...

    LINGq Sample

    【压缩包子文件的文件名称列表】:“LINQSamples”可能包含了一系列示例材料,如LingQ平台上的课程片段、练习题、学习策略指南等。这些样本可能涵盖听、说、读、写各个方面,旨在帮助用户实践LingQ的学习理念,如...

    LingQ进口「LingQ Importer」-crx插件

    从网上自动导入外语内容,并与LingQ的web &移动语言学习应用程序进行研究。 LingQ Importer扩展程序允许您将YouTube和Netflix等网站的网页,文章和视频字幕自动导入LingQ,以便使用LingQ的网络和移动语言学习工具...

    DotNET语言集成查询-LINQ简介

    1. **语言特性**:LINQ将查询表达式直接整合到C#或VB.NET的语法中,使用类似于SQL的查询语法,如`from`, `where`, `select`等,使查询更加自然且易于理解。 2. **LINQ Provider**:这些是执行查询的组件,根据数据...

    LINQ查询语句

    3. **方法链式调用**:另一种执行LINQ查询的方法,通过一系列的方法调用来构建查询逻辑,相较于查询表达式更灵活且易于调试。 #### 三、LINQ的类型 1. **LINQ to Objects**:用于查询内存中的对象集合。 2. **LINQ...

    LingL:lingq 的克隆以学习新语言-开源

    通过阅读您选择的任何内容来学习新语言。 这是受到其他站点/项目的启发,如开源 Lwt、闭源 lingq 等......主要站点位于 GITHUB(用于发布、问题等......):https://github.com/gustavklopp/LingL

    读取和修改xml文件

    DOM一次性加载整个XML文档到内存,形成一个树形结构,便于遍历和操作。SAX则采用事件驱动模型,逐行读取,适合处理大型XML文件,但不支持随机访问。 3. **DOM解析** 使用Java的`javax.xml.parsers....

    Python-Anki单词本助手转换生成Anki单词本

    在Python中,文件操作是通过内置的open函数实现的,包括写入、读取和追加等操作。本项目中,处理后的单词数据会被保存到本地文件,以便Anki导入。 7. 异常处理与错误预防: 网络爬虫过程中可能会遇到网络问题、...

    Visual Studio 2010 Samples

    Anders(.net的老大)最新在演示C#4.0时用到的一些demo.当然也包括一些其他的关于LINGQ的Demo。全部在VisualStudio2010 即.net4.0beta下演示。非常经典。其中有一段程序能让C#实现动态语言(类似python)的效果。

    LINQPad v4.48.01 破解版

    LINQPad 4.48.01 完美破解/激活,已经开启智能感知和智能完成功能。 Crack \ Activated version, enable autocompletion and intellisense 全网唯一可用LINQPad v4.47.02 破解版见: ...

    检索 linq.js

    lingq.js 欢迎大家下载

    Vocab Tracker-crx插件

    VocabTracker是受LingQ,Readlang和LWT启发的工具:它可以帮助您在任何网页上跟踪词汇。 VocabTracker是一个词汇跟踪工具,可以让您在任何页面上跟踪词汇,从而可以将任何网站用作语言学习资源。 它支持以下功能:-...

    Web Highlighter-crx插件

    语言:English (United States) 此扩展名将帮助您存储和突出显示短语或文本块,并在需要时添加描述。 Web higlighter是chrome的扩展程序,可帮助您突出显示单词,词组或文本块。...此扩展名受到lingq和文本学习的启发。

    LWT ◆ Learning with Texts:◆语言学习的多功能工具◆-开源

    课文学习(LWT)是一种用于语言学习的多功能工具,灵感来自斯蒂芬·克拉森(Stephen Krashen)的第二语言习得原理,史蒂夫·考夫曼(Steve Kaufmann)的LingQ系统,Khatzumoto的想法(AJATT =“所有时间都是日语”)...

    BookShop.sln

    《基于Lingq开发的网上书店BookShop项目详解》 在IT行业中,开发一个功能完善的网上书店是一项复杂而富有挑战性的任务。本文将深入探讨基于Lingq框架开发的BookShop项目,涵盖该项目的主要组成部分、架构设计以及...

    Wordology-crx插件

    受Lingq和FLTR的启发,Wordology允许您为单个单词添加翻译,并通过简单的鼠标悬停显示它们。单词采用颜色编码:绿色代表已知单词,红色代表未知单词,有助于直观显示您的进度。此外,Wordology的“智能匹配”试探法...

    给文件加锁

    这些函数提供了对文件的锁定操作,允许程序在指定的文件描述符上设置读锁或写锁。然而,根据题目描述,所提供的代码可能并不适合在多线程环境中使用,这可能是因为文件锁在多线程中的管理较为复杂,需要额外的同步...

Global site tag (gtag.js) - Google Analytics