Linq To Object

  •   主要的查询操作方法

 

Family

Query operators

Filtering

OfType、Where

Projection

Select、SelectMany

Partitioning

Skip、SkipWhile、Take、TakeWhile

Join

GroupJoin、Join

Concatenation

Concat

Ordering

OrderBy、OrderByDescending、Reverse、ThenBy、ThenByDescending

Grouping

GroupBy、ToLookup

Set

Distinct、Except、Intersect、Union

Conversion

AsEnumerable、AsQueryable、Cast、ToArray、ToDictionary、ToList

Equality

SequenceEqual

Element

ElementAt、ElementOrDefault、First、FirstOrDefault、Last、LastOrDefault、Single、SingleOrDefault

Generation

DefaultIfEmpty、Empty、Range、Repeat

Quantifiers

All、Any、Contains

Aggregation

Aggregate、Average、Count、LongCount、Max、Min、Sum       

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • Filtering【过滤】

    筛选指将结果集限制为只包含那些满足指定条件的元素的操作,下面的示例使用Where子句来从数组中筛选那些具有特定长度的字符串。

string[] words = { "the", "quick", "brown", "fox", "jumps" };
IEnumerable<string> query = from word in words
where word.Length == 3
select word;
  • Projection Operations【投影】

    投影是指将对象转换为一种新形式的操作,该操作通常值包含那些随后将要使用的属性。通过使用投影,可以构建依据每个对象生成的新类型。你可以映射属性,并对该属性执行数学函数。还可以在不更改原始对象的情况下映射该对象,下面的示例中的Select子句来映射字符串列表中的每个字符串的第一个字母。

List<string> words = new List<string>() { "an", "apple", "a", "day" };
var query = from word in words
select word.Substring(0, 1);

    SelectMany,下面的示例中使用多个from子句或from子句来映射字符串列表中每个字符串中的每个单词。

List<string> phrases = new List<string>() { "an apple a day", "the quick brown fox" };
var query = from phrase in phrases
from word in phrase.Split(' ')
select word;

    Select与SelectMany的比较:

  • Partitioning【数据分区】

    LINQ中的分区指的是在不重新排列元素的情况下,将输入序列划分为两部分,然后返回其中的一部分的操作。

运算符名称

说明

Skip

跳过序列中指定位置之前的元素

SkipWhile

基于谓词函数跳过元素,知道某元素不在满足条件

Take

提取序列中指定位置之前的元素

TakeWhile

基于谓词函数提取元素,直到某元素不在满足条件

 

 

 

 

 

 

 

    

   

     下面的代码示例中使用Skip子句来跳过字符串数组中的前四个字符串,然后返回此数组中剩余的字符串

string[] words = { "an", "apple", "a", "day", "keeps", "the", "doctor", "away" };
var query = words.Skip(4);

     下面的代码示例中使用SkipWhile子句来跳过数组中字符串的首字母为”a”的字符串。返回此数组中的剩余字符串

string[] words = { "an", "apple", "a", "day", "keeps", "the", "doctor", "away" };
var query = words.SkipWhile(u => u.Substring(0, 1) == "a");

    下面示例使用Take子句来返回字符串数组中的前两个字符串

string[] words = { "an", "apple", "a", "day", "keeps", "the", "doctor", "away" };
var query = words.Take(2);

   下面示例中使用TakeWhile子句来返回数组中的字符串长度小于或等于5的字符串

string[] words = { "an", "apple", "a", "day", "keeps", "the", "doctor", "away" }; 
var query = words.TakeWhile(u => u.Length < 6);
  •     Grouping【数据分区】

方法名

说明

查询表达式语法

GroupBy

对共享公共属性的元素进行分组。每个组都有一个IGrouping<TKey,TElement>对象表示

Group……by

Group……by……into

ToLookup

根据键选择器函数将元素插入到Lookup<Tkey,TElement>中

 

 

 

 

 

 

 

 

    GroupBy:

    输出结果:

    Lookup<TKey,TElement>表示映射到一个或多个值得各个键的集合

    Lookup<TKey,TElement>类似于Dictionary<TKey,TValue>。不同之处在于:Dictionary<TKey,TValue>将各个键映射到单个值,而Lookup<TKey,TElement>将各个键映射到值得集合。

 

    输出结果:

  • Set运算

    LINQ中的Set操作是指根据相同或不同集合中是否存在等效元素来生成结果集的查询操作

方法名

说明

Distinct

从集合移除重复值

Except

返回差集,差集是指位于一个集合单步位于另外一个集合的元素

Intersect

返回交集

Union

返回并集

 

 

 

 

 

 

 

  •  Element【元素操作】

    元素操作从一个序列返回单个特定元素

方法名

说明

ElementAt

返回集合中指定索引处得元素

ElementAtOrDefault

返回集合中指定索引处得元素;如果超出范围,则返回默认值

First

返回集合中的第一个元素或满足条件的第一个元素

FirstOrDefault

返回集合中的第一个元素或满足条件的第一个元素。如果没有这样的元素,则返回默认值

Last

返回集合中的最后一个元素或满足条件的最后一个元素

LastOrDefault

返回集合中的最后一个元素或满足条件的最后一个元素。如果没有这样的元素,则返回默认值

Single

返回集合中的唯一元素或满足条件的唯一元素

SingleOrDefault

返回集合中的唯一元素或满足条件的唯一元素。如果没有这样的元素或集合不是正好包含一个元素,则返回默认值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • Aggregation【聚合操作】

方法名

说明

Aggregate

对集合值执行自定义聚合运算

Average

计算值集合的平均值

Count

对集合中的元素进行计数,还可以仅满足某一谓词函数的元素进行计数

Longcount

对大型集合中的元素进行计数,还可以仅满足某一谓词的元素进行计数

Max

确定集合的最大值

Min

确定集合中的最小值

Sum

计算集合中值得总和

 

 

 

 

 

 

 

 

 

 

 

 

   

 

    Aggregate:

    输出结果:

  • Concatenation【串联运算】

    Concat:

  • Converting Data Types

方法名

说明

AsEnumerable

返回类型为IEnumerable<T>的输入

AsQueryable

将IEnumerable转换为(泛型)IQueryable

Cast

将集合的元素强制转换为指定的类型

OfType

根据值强制转换为指定类型的能力筛选值

ToArray

 

ToDictionary

 

ToList

 

ToLookUp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

备注:此文参考了MSDN

posted @ 2012-03-02 14:49  pstune  阅读(1418)  评论(1编辑  收藏  举报