- 浏览: 507275 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (329)
- [发布至博客园首页] (12)
- [随笔分类][01] .Net X (59)
- [随笔分类][20] Architecture (16)
- [随笔分类][21] Developer Logs (13)
- [网站分类]Windows 7 (1)
- [随笔分类][13] Oracle & .Net (7)
- [随笔分类][16] Love in China (14)
- [随笔分类][15] Development Tools (20)
- [随笔分类][18] Windows Phone (12)
- [随笔分类][12] Design & Pattern (17)
- [网站分类].NET新手区 (22)
- [网站分类]首页候选区 (2)
- [随笔分类][08] Windows (Server) (13)
- [随笔分类][02] CSLA.Net (3)
- [随笔分类][10] jQuery & javaScript (10)
- [随笔分类][11] SQL Server (4)
- [随笔分类][22] Enterprise Logs (3)
- [随笔分类][03] News (9)
- [随笔分类][19] Quality Assurance (2)
- [随笔分类][05] Silverlight (20)
- [随笔分类][14] Google Earth & .Net (6)
- [网站分类]非技术区 (9)
- [随笔分类][07] WWF (2)
- [随笔分类][04] SharePoint (1)
- [随笔分类][20] Analysis & Design (36)
- [随笔分类][06] WCF (5)
- [随笔分类][12] Architecture (1)
- [随笔分类][09] WPF (0)
- [随笔分类][17] VStudio & Expression (5)
最新评论
-
zhangyy130:
你好,我关于第二段的那个表视图、模型与图这三者的关系我没有看明 ...
UML模型的组成 -
guji528:
谢谢分享!
Enterprise Architect 基础应用 -
studentsky:
好文章,图文并茂!
WCF 第一个用 Visual Studio 2010 创建的WCF服务 -
chen975311486:
用哪个工具画的????
UML中对关系的描述 (二) -
frankies:
继续学习中。。
UML 交互概述图
复合的 from 子句
如果需要根据对象的一个成员进行过滤,而该成员本身是一个集合,就可以使用复合的 from 子句。
Racer 类定义了一个属性 Cars, Cars 是一个字符串数组。
要过滤驾驶 Ferrari 的所有冠军, 可以使用如下所示的 LINQ 查询。
第一个 from 子句访问从 Formyla1.GetChampions()返回的Racer 对象,
第二个 from 子句访问 Racer 类的属性 Cars,返回所有的string 类型的赛车。
接着在 Where 子句中使用这些赛车过滤驾驶 Ferrari 的所有车手
并使用LastName升序
private static void CompoundFrom() { var fd = from r in Formula1.GetChampions() from c in r.Cars where c == "Ferrari" orderby r.LastName select r.FirstName + " " + r.LastName; foreach (var racer in fd) { Console.WriteLine(racer); } }
结果把Cas中带有Ferrari 的9个车手名字列了出来:
C#编译器把复合的 from 子句和 LINQ 查询转换为 SelectMany()扩展方法。SelectMany()可用于迭代集合
中的集合。示例中 SelectMany()方法的重载版本如下所示:
public static IEnumerable < TResult > SelectMany < TSource, TCollection, TResult > (
this IEnumerable < TSource > source,
Func < TSource, IEnumerable < TCollection > > collectionSelector,
Func < TSource, TCollection, TResult > resultSelector);
下面的程序就是调用这个扩展方法,说明如下:
1.第一个参数是隐式参数,从 GetChampions()方法中接收 Racer 对象序列。
2.第二个参数(r => r.Cars)是 collectionSelector 委托,它定义了内部集合。在λ表达式r=>r.Cars 中,应返回赛车集合。r 本身是R集合,用这个又得到了Cars集合
3.第三个参数是一个委托,现在为每个赛车调用该委托,接收 Racer 和 Car 对象。
4.λ表达式创建了一个匿名类型,它带 Racer1 和 Car1 属性。匿名对象的 Racer1属性附上了r,Car1属性附上了c,属性名随意定的
5.这个SelectMany()方法的结果是摊平了赛手和赛车的层次结构,
5.为每辆赛车返回匿名类型的一个新对象集合。
这个新集合传送给Where()方法,过滤出驾驶 Ferrari 的赛手。最后,调用OrderBy()和Select()方法:
/// <summary> /// 复合的from子句 /// </summary> private static void CompoundFrom() { var fd = Formula1.GetChampions(). SelectMany( r => r.Cars, (r, c) => new { Racer1 = r, Car1 = c }). Where(r => r.Car1 == "Ferrari"). OrderBy(r => r.Racer1.LastName). Select(r => r.Racer1.FirstName + " " + r.Racer1.LastName); foreach (var racer in fd) { Console.WriteLine(racer); } }
结果和上面一样
把 SelectMany()泛型方法解析为这里使用的类型,所解析的类型如下所示。
在这个例子中,数据源是 Racer 类型,所过滤的集合是一个string 数组,当然所返回的匿名类型的名称是未知的,
这里显示为 TResult:
public static IEnumerable < TResult > SelectMany < Racer, string, TResult > (
this IEnumerable < Racer > source, //Formula1.GetChampions()的结果
Func < Racer, IEnumerable < string > > collectionSelector, // SelectMany( r => r.Cars,中的 r => r.Cars, 返回结果集为 IEnumerable < string >
Func < Racer, string, TResult > resultSelector); //(r, c) => new { Racer1 = r, Car1 = c }). // r, c, => new {} 返回结果为
TResult 到r 表达式左式的第一个参数r
查询仅从 LINQ 查询转换为扩展方法,所以结果与前面的相同。
发表评论
-
LINQ to SQL语句之Insert/Update/Delete操作
2009-12-30 14:54 1152Insert/Update/Delete操作 插入(Ins ... -
RabbitMQ 安装配置和简单实例
2010-01-21 16:52 1885安装ErLang运行环境 配置运行环境变量 启动服务 ... -
MSMQ(Microsoft Message Queue,微软消息队列) Asp.Net 简单示例
2010-01-22 14:59 3296系统: Windows XP 1.安装MSMQ 控制面板—&g ... -
IromPython .Net 的简介和第一个例子
2010-01-23 18:53 1371.Net 4 都已经到来 ... -
Microsoft Asp.Net MVC 从入门到精通
2010-01-27 17:53 870ASP.NET MVC Framework是微软官方提供的MV ... -
C# Socket 同步通信与异步通信 示例
2010-01-30 17:50 4767同步 1.建立链接发送和获取信息 异步 1.服务器端建立一 ... -
解决 Visual Stuido 工具栏中的工具重置后,恢复回来。
2009-12-18 17:06 1309拿DevExpress 控件为例,如果重置工具栏后,以前的工具 ... -
LINQ to SQL 用O/R设计器手工建表对象
2009-10-11 22:04 1072除了自己建立定制对象外,还可以使用O/R设计器以可视化的方式创 ... -
LINQ to XML .Net 3.5 中的新XML对象
2009-10-15 14:11 916System.Xml.Linq 命名空间中,有一系列新的LIN ... -
LINQ to XML 用 LINQ 查询 XML
2009-10-15 15:57 696将一个已知的XML放到XDocument 对象当中使用LINQ ... -
LINQ to XML 操作XML文档
2009-10-15 17:18 1020使用 XDocument 对象的 Element 方法,获取制 ... -
C# 编码规范
2009-10-15 19:20 752陈年的文档,不过很不错整理出来发到博客上,还有更多的朋友需要。 ... -
Visual Studio 项目模板、文件模板、代码段和环境设置
2009-10-15 19:31 971很久前使用过,那个时候还没有开始写博客,好久不用就都忘记了,这 ... -
ADO.NET Entity Framework 概述
2009-10-16 11:50 597ADO.NET Entity Framework 与 LINQ ... -
LinqPad 1.31 下载
2009-01-14 15:42 1003LinqPad 1.31 也许你已经非常熟悉他了,为即将使用L ... -
jQuery 的第一个例子
2009-01-18 10:34 846通过这个例子可以对jQuery的使用有个基本的认识,jQ ... -
jQuery 选择器的使用
2009-01-18 10:39 876jQuery 能如此的流行,很重要的一点也许就是他有非常强大且 ... -
一次从GridView 获得多个指定行中多个指定控件的值
2009-01-20 07:33 902一次从GridView 获得多个指定行中多个指定控件的值,非常 ... -
jQuery 的Ajax应用(1)--学习篇,内附实例
2009-01-28 21:48 1358下面以前台jQuery,后天C# 的方式,演示了,如何通过 ... -
Enterprise Library 4.1 一步一步从入门到精通(未完成)
2009-02-05 23:04 915Enterprise Library 4.1 一步一步从入门到 ...
相关推荐
本文主要讨论的是LINQ的标准查询操作符,这些操作符用于构建查询表达式,对数据进行过滤、转换、排序等操作。 首先,我们来看投影操作符,其中最常见的是`Select`。`Select`用于从输入序列中选择新的元素或对象。在...
### LINQ标准查询操作符详解 #### 一、投影操作符 **1. Select** - **定义**: `Select`操作符用于对集合中的每个元素应用指定的函数,并将结果返回为一个新的序列。此操作通常用来从原始数据集中提取特定属性或...
10. LINQ扩展方法:掌握LINQ标准查询操作符和如何编写自定义扩展方法。 针对这些知识点,面试中可能会提出的具体问题包括: - 如何使用LINQ来查询一个集合,并找出符合特定条件的元素? - 在LINQ中,如何实现分页...
C# 5.0引入了异步LINQ操作符,如`ToListAsync()`和`ToObservableAsync()`,它们支持在查询中进行异步操作,从而改善UI响应。 ### 8. 扩展方法和LINQ LINQ的实现主要依赖于扩展方法,这是C#中一种特殊的方法,可以被...
这些操作符分别用于合并、查找共同元素和找出不共享的元素: ```csharp var uniqueNames = list1.Except(list2); var commonNames = list1.Intersect(list2); var combinedNames = list1.Union(list2); ``` ### ...
3. 查询操作符:LINQ包含一系列操作符,如Where、Select、GroupBy、OrderBy等,用于过滤、转换和排序数据。 **二、LINQ查询表达式** 1. 从简单查询开始:例如,`var query = from item in collection where item....
这只是LINQ功能的一小部分,它还包括其他操作符如`Select`(用于转换元素)、`Join`(用于合并不同数据源)、`GroupBy`(用于分组数据)、`OrderBy`/`OrderByDescending`(用于排序)以及`Sum`, `Average`, `Count`,...
### 三、LINQ操作符 1. **选择(Select)**:用于从数据源中选择元素,相当于SQL的SELECT。 2. **过滤(Where)**:根据条件过滤元素,相当于SQL的WHERE子句。 3. **排序(OrderBy/OrderByDescending)**:对元素...
3. **执行查询**:执行查询以获取结果,可以是立即执行(即查询语句后面跟一个迭代操作符如foreach)或者延迟执行(仅在需要时执行,如将查询结果赋值给变量)。 【查询表达式的结构】: - `from`子句:定义数据源...
四、LINQ操作符 1. **Select**:用于投影,根据指定的函数映射每个元素。 2. **Where**:用于过滤,根据指定的条件筛选元素。 3. **GroupBy**:用于对数据进行分组,返回一个IGrouping, TElement>类型的集合。 4. **...
2. 当需要使用到查询表达式特有的操作符,例如Group By,或者在需要构建复杂的查询逻辑时,查询表达式能够提供更清晰的结构来表达这些逻辑。 总之,无论是查询表达式还是点标记,它们都是实现LINQ查询的不同方式。...
- **Lambda表达式**:用作查询中的函数或委托,简化了操作符的定义。 **3. LINQ查询的基本结构** - **from子句**:指定数据源和范围变量,范围变量在查询中代表数据源中的每个元素。 - **where子句**:过滤数据,...
5. **查询操作符**:探索各种内置的查询操作符,如Select、Where、GroupBy、Join和OrderBy等,以及如何自定义查询操作符。 6. **集合操作与并行查询**:学习如何使用LINQ对集合进行转换、过滤和合并,以及如何利用...
3. **多表关联**:`Join`操作符在处理多表查询时非常关键,它使得在多个数据集之间建立关联变得简单,这对于数据库查询尤其重要。 4. **LINQ to SQL**:这是LINQ的一个具体实现,允许开发者直接在SQL Server数据库...
- 扩展方法使得LINQ操作符能够被添加到任何类型上,而无需修改该类型。 6. **示例代码** - 使用LINQ查询表达式与EF结合的例子,展示如何从数据库中选择、过滤、排序和投影数据。 - 如:`var query = from ...
`Where` 操作符用于过滤数据,其功能类似于 SQL 中的 `WHERE` 子句。它可以接受不同的形式: 1. **简单形式**: - 示例1:筛选伦敦的客户 ```csharp var q = from c in db.Customers where c.City == "London" ...
8. **Concat/Union/Intersect/Except**:集合操作符,用于合并(`Concat`)、合并并去除重复(`Union`)、找出两个集合的交集(`Intersect`)和差集(`Except`)。 9. **Top/Bottom and Paging**:`Top` 用于获取...
在LINQ中,你可以使用查询表达式(也称为“查询语法”)或方法链(也称为“操作符语法”)来编写查询。 首先,我们来看查询表达式。查询表达式以`from`关键字开始,接着指定一个或多个源和投影,然后是`where`子句...
LINQ提供了一系列扩展方法,适用于集合、数组和查询结果等对象,无需使用传统的SQL-like `from...where...select` 子句。 考虑以下使用查询语法的例子: \[ \texttt{var result = from n in names where n.Starts...