LinqToObject(1)——查询

做者: 梅桦 发表于 2010-05-06 16:03 原文连接 阅读: 84 评论: 0html

LINQ,语言级集成查是Language INtegrated Query的意思,它是链接对象领域和数据领域的一座桥梁。能够经过C#,对各类数据源进行Linq查询:sql

sql数据库(LinqToSql),xml文档(LinqToXml),ado.net的数据集,以及支持IEnumerableIEnumerable接口的任意对象集合。数据库

Linq查询通常分三个步骤进行:获得数据源——创建查询——执行查询。下面详细介绍查询。这些查询结合LinqPad来测试,关于LinqPad介绍请见:ide

http://www.cnblogs.com/jams742003/archive/2010/05/05/1728124.html测试

 

(一)基本查询spa

基本查询包括,获得数据源,查询条件,分组,排序,投影。.net

1)经过字符串来演示code

LinqPad上在statements模式下进行如下测试:orm

string  strTemp  =   " Oh,What a pity! " ;
string [] strTemps  =  strTemp.Split( new   char [] {  '   ' ' , ' ' ! '  });
 

var query 
=  from st  in  strTemps
            
where  st.Contains( ' a ' )
            orderby st.Length descending
            select st;

query.Dump();

 

能够获得结果:xml

 

What

a

 

说明:

·数据源strTemps

·定义变量st

·条件,where,用来查找单词中含有字母a的单词

·结果排序,按单词长度降序

·投影,把单词添充到结果query

 

如今经过匿名类型对投影进行设置:将单词和单词的长度作为结果进行填充

string  strTemp  =   " Oh,What a pity! " ;
string [] strTemps  =  strTemp.Split( new   char [] {  '   ' ' , ' ' ! '  }); 

var query 
=  from st  in  strTemps
            
where  st.Contains( ' a ' )
            orderby st.Length descending
            select 
new  { 含有字母a的单词  =  st, 单词的长度  =  st.Length };

query.Dump();

 

结果:

 

含有字母a的单词

单词的长度

What

4

a

1

 

上边两种都是以语句方式进行的查询,也能够以方法方式进行查询:

string  strTemp  =   " Oh,What a pity! " ;
string [] strTemps  =  strTemp.Split( new   char [] {  '   ' ' , ' ' ! '  }); 

var query 
=  strTemps
            .Where(st 
=>  st.Contains( ' a ' ))
            .OrderBy(st 
=>  st.Length)
            .Select(st 
=>  st);

query.Dump();

 

结果同上,

string  strTemp  =   " Oh,What a pity! " ;
string [] strTemps  =  strTemp.Split( new   char [] {  '   ' ' , ' ' ! '  }); 

var query 
=  strTemps
             .Where(st 
=>  st.Contains( ' a ' ))
             .OrderBy(st 
=>  st.Length)
             .Select(st
=> new {含有字母a的单词  =  st, 单词的长度  =  st.Length});

query.Dump();

 

经过方法进行查询时须要Lambda表达式,关于Lambda请见:

http://www.cnblogs.com/jams742003/archive/2009/12/23/1630737.html

其中的方法指的是扩展方法

 

下面,实现分组,为了演示分组功能,如今经过数据库来实现。

 

Unid

Name

Version

2

宋江

5

38

张青

1

40

张清

1

41

ww

0

 

这张表是数据,如今以Version来分组:

from c  in  Customers
group c by c.Version into selfGroup
where  selfGroup.Count() > 1
select selfGroup

 

查询以Version进行分组,且经过into selfGroup来对分组进行后续筛选,选择组内成员数在大于1的,结果是:

 

Key=

1

 

 

Unid

FirstName

LastName

CreateTime

Address

Version

38

2010-1-6 9:40:47

清河县1

1

40

2010-1-6 10:00:32

未知1

1

78

 

 

 

 

2

 

如下经过数据功能来介绍查询方法

(二)排序

方法OrderByDescendingOrderByThenByThenByDescending

降序排列

int [] ii  =   new   int [] {  1 90 12 25 55  };
var q
= ii 
    .OrderByDescending(p
=> p)
    .Select(p
=> p);
q.Dump();

 

结果:

 

90

55

25

12

1

 

(三)结果集操做

·Distinct:去重

·Except:返回一集合中存在,另外一集合不存在的结果

·Intersect:交集

·Union:并集

 

string  str1 = " abc123aab " ;
string  str2 = " abc456 "

// Distinct
var q1 = str1.Distinct();
q1.Dump();

  

a

b

c

1

2

3

 

// Except
var q2 = str1.Except(str2);
q2.Dump();

 

1

2

3

 

// Intersect
var q3 = str1.Intersect(str2);
q3.Dump();

  

a

b

c

 

// Union
var q4 = str1.Union(str2);
q4.Dump();

 

a

b

c

1

2

3

4

5

6

 

(四)限定符

AnyAllContains

Any用于判断是否存在元素

All 用于判断数据源中的元素是否所有知足条件

Contains用于判断数据源是否包含指定的元素

相关文章
相关标签/搜索