登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学无止境

一点积累,与大家分享

 
 
 

日志

 
 

精通 LINQ数据访问技术  

2010-07-12 12:21:18|  分类: C#技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  集合操作

在LINQ中,集合操作是指对一个序列或多个序列本 身的操作,如去掉重复元素、计算两个集合的交集等操作,包括以下4种操作。

  ● Distinct操作,可以去掉将数据源中重复的元素,并返回一个新序列。另外,它还可以指定一个比较器来比较两个元素是否相同。

  ● Except操作,可以计算两个集合的差集(在一个集合中而不在另外一个集合中元素组成的集合)。

  ● Intersect操作,可以计算两个集合的交集(由既在一个集合中,又在另外一个集合中的元素组成的集合)。

  ● Union操作,可以计算两个集合的并集(由在一个集合中,或者在另外一个集合中的元素组成的集合)。

5.6.1  去掉集合中的重复元素操作Distinct

Distinct操作可以去掉将数据源中重复的元 素,并返回一个新序列。另外,它还可以指定一个比较器来比较两个元素是否相同。Enumerable类的Distinct()方法的原型如下。

(1)public static IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source)

(2)public static IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source,

IEqualityComparer<TSource> comparer)

其中,source参数表示数据 源,comparer参数表示比较器,用来比较两个元素是否相同。TSource指定source参数中的元素的类型。

下面的代码实例中的DistinctQuery() 函数演示了Distinct操作去掉集合A(dataSourceA)中重复元素的方法,具体步骤说明如下。

(1)创建数据类型为“string”的集合 A(dataSourceA),它的值为“{A,B,B,C,D,D,E}”。

(2)使用Distinct操作去掉集合A中重复的 元素,结果保存在values变量中。

(3)使用foreach语句输出Distinct 操作的结果。

private void DistinctQuery()

         {   ///构建数据源               

                   List<string> dataSourceA = new List<string>();

                   ///初始化数据源A

                   dataSourceA.Add("A");

                   dataSourceA.Add("B");

                   dataSourceA.Add("B");

                   dataSourceA.Add("C");

                   dataSourceA.Add("D");

                   dataSourceA.Add("D");

                   dataSourceA.Add("E");

                   ///执行Distinct操作

                   var values = dataSourceA.Distinct();

                   ///显示查询结果

                   OutputSetInfo(dataSourceA,"集合A");

                   OutputSetInfo(values.ToList<string>(),"去掉重复元素之后的集合A");

                   Response.Write("<br />");

         }

下面的代码实例中的 OutputSetInfo(List<string> list,string name)函数在网页上显示一个集合(数据类型为“List<string>”)的所有元素,并显示集合的名称。

private void OutputSetInfo(List<string> list,string name)

         {

                   Response.Write(name + "={");

                   for(int i = 0; i < list.Count; i++)

                   {

                            if (i < list.Count - 1) Response.Write(list[i] + ",");

                            else Response.Write(list[i]);

                   }

                   Response.Write("}<br />");

         }

运行上述实例代码,在IE浏览器中查看 Distinct操作的结果,如图5.1所示。其中,集合A的值为“{A,B,B,C,D,D,E}”,去掉重复元素之后的值为 “{A,B,C,D,E}”。

精通 LINQ数据访问技术 - 每天积累一点 - 学无止境

图5.1  Distinct操作的结果

5.6.2  差集操作Except

Except操作可以计算两个集合的差集(由在一个 集合中而不在另外一个集合中的元素组成的集合)。给定A={A,B,B,C,D,D,E}和B={A,C,C,F,H}集合,那么A与B的差集(表示为 “A-B”)={B,D,E}。Enumerable类的Except()方法的原型如下。

(1)public static IEnumerable<TSource> Except<TSource>(this IEnumerable<TSource> first,

IEnumerable<TSource> second)

(2)public static IEnumerable<TSource> Except<TSource>(this IEnumerable<TSource> first,

IEnumerable<TSource> second,IEqualityComparer<TSource> comparer)

其中,first和second参数表示两个集 合,comparer参数表示比较器,用来比较两个元素是否相同。TSource指定source参数中的元素的类型。

下面的代码实例中的ExceptQuery()函数 演示了Except操作计算集合A(dataSourceA)和B(dataSourceB)的差集的方法,具体步骤说明如下。

(1)创建数据类型为“string”的集合集合 A(dataSourceA)和B(dataSourceB),它们的值分别为“{A,B,B,C,D,D,E}”和“{A,C,C,F,H}”。

(2)使用Except操作计算集合A和B的差集, 结果保存在values变量中。

(3)使用foreach语句输出Except操作 的结果。

         private void ExceptQuery()

         {   ///构建数据源               

                   List<string> dataSourceA = new List<string>();

                   List<string> dataSourceB = new List<string>();

                   ///初始化数据源A

                   dataSourceA.Add("A");

                   dataSourceA.Add("B");

                   dataSourceA.Add("B");

                   dataSourceA.Add("C");

                   dataSourceA.Add("D");

                   dataSourceA.Add("D");

                   dataSourceA.Add("E");

                   ///初始化数据源B

                   dataSourceB.Add("A");

                  dataSourceB.Add("C");

                   dataSourceB.Add("C");

                   dataSourceB.Add("F");

                   dataSourceB.Add("H");

                   ///获取集合A和B的差集

                   var values = dataSourceA.Except(dataSourceB);

                   ///显示查询结果

                   OutputSetInfo(dataSourceA,"集合A");

                   OutputSetInfo(dataSourceB,"集合B");

                   OutputSetInfo(values.ToList<string>(),"A与B差集");

                   Response.Write("<br />");

         }

运行上述实例代码,在IE浏览器中查看Except 操作的结果,如图5.2所示。其中,集合A和B的值分别为“{A,B,B,C,D,D,E}”和““{A,C,C,F,H}””,集合A和B的差集的值为 “{B,D,E}”。

精通 LINQ数据访问技术 - 每天积累一点 - 学无止境

图5.2  Except操作的结果

5.6.3  交集操作Intersect

Intersect操作可以计算两个集合的交集(由 既在一个集合中,又在另外一个集合中的元素组成的集合)。给定A={A,B,B,C,D,D,E}和B={A,C,C,F,H}集合,那么A与B的交集= {A,C}。Enumerable类的Intersect()方法的原型如下。

(1)public static IEnumerable<TSource> Intersect<TSource>(this IEnumerable<TSource> first,

IEnumerable<TSource> second)

(2)public static IEnumerable<TSource> Intersect<TSource>(this IEnumerable<TSource> first,

IEnumerable<TSource> second,IEqualityComparer<TSource> comparer)

其中,first和second参数表示两个集 合,comparer参数表示比较器,用来比较两个元素是否相同。TSource指定source参数中的元素的类型。

下面的代码实例中的 IntersectQuery()函数演示了Intersect操作计算集合A(dataSourceA)和B(dataSourceB)的交集的方法, 具体步骤说明如下。

(1)创建数据类型为“string”的集合集合 A(dataSourceA)和B(dataSourceB),它们的值分别为“{A,B,B,C,D,D,E}”和“{A,C,C,F,H}”。

(2)使用Intersect操作计算集合A和B的 交集,结果保存在values变量中。

(3)使用foreach语句输出 Intersect操作的结果。

         private void IntersectQuery()

         {   ///构建数据源               

                   List<string> dataSourceA = new List<string>();

                   List<string> dataSourceB = new List<string>();

                   ///初始化数据源A

                   dataSourceA.Add("A");

                   dataSourceA.Add("B");

                   dataSourceA.Add("B");

                   dataSourceA.Add("C");

                   dataSourceA.Add("D");

                   dataSourceA.Add("D");

                   dataSourceA.Add("E");

                   ///初始化数据源B

                   dataSourceB.Add("A");

                   dataSourceB.Add("C");

                   dataSourceB.Add("C");

                   dataSourceB.Add("F");

                   dataSourceB.Add("H");

                   ///获取集合A和B的交集

                   var values = dataSourceA.Intersect(dataSourceB);

                   ///显示查询结果

                   OutputSetInfo(dataSourceA,"集合A");

                   OutputSetInfo(dataSourceB,"集合B");

                   OutputSetInfo(values.ToList<string>(),"A与B交集");

                   Response.Write("<br />");

         }

运行上述实例代码,在IE浏览器中查看 Intersect操作的结果,如图5.3所示。其中,集合A和B的值分别为“{A,B,B,C,D,D,E}”和““{A,C,C,F,H}””,集合 A和B的交集的值为“{A,C}”。

精通 LINQ数据访问技术 - 每天积累一点 - 学无止境

图5.3  Intersect操作的结果

5.6.4  并集操作Union

Union操作可以计算两个集合的并集(由在一个集 合中,或者在另外一个集合中的元素组成的集合)。给定A={A,B,B,C,D,D,E}和B={A,C,C,F,H}集合,那么A与B的交集= {A,B,C,D,E,F,H}。Enumerable类的Union()方法的原型如下。

(1)public static IEnumerable<TSource> Union<TSource>(this IEnumerable<TSource> first,

IEnumerable<TSource> second)

(2)public static IEnumerable<TSource> Union<TSource>(this IEnumerable<TSource> first,

IEnumerable<TSource> second,IEqualityComparer<TSource> comparer)

其中,first和second参数表示两个集 合,comparer参数表示比较器,用来比较两个元素是否相同。TSource指定source参数中的元素的类型。

下面的代码实例中的UnionQuery()函数演 示了Union操作计算集合A(dataSourceA)和B(dataSourceB)的并集的方法,具体步骤说明如下。

(1)创建数据类型为“string”的集合集合 A(dataSourceA)和B(dataSourceB),它们的值分别为“{A,B,B,C,D,D,E}”和“{A,C,C,F,H}”。

(2)使用Union操作计算集合A和B的并集,结 果保存在values变量中。

(3)使用foreach语句输出Union操作的 结果。

         private void UnionQuery()

         {   ///构建数据源               

                   List<string> dataSourceA = new List<string>();

                   List<string> dataSourceB = new List<string>();

                   ///初始化数据源A

                   dataSourceA.Add("A");

                   dataSourceA.Add("B");

                   dataSourceA.Add("B");

                   dataSourceA.Add("C");

                   dataSourceA.Add("D");

                   dataSourceA.Add("D");

                   dataSourceA.Add("E");

                   ///初始化数据源B

                   dataSourceB.Add("A");

                   dataSourceB.Add("C");

                   dataSourceB.Add("C");

                   dataSourceB.Add("F");

                   dataSourceB.Add("H");

                   ///获取集合A和B的并集

                   var values = dataSourceA.Union(dataSourceB);

                   ///显示查询结果

                   OutputSetInfo(dataSourceA,"集合A");

                   OutputSetInfo(dataSourceB,"集合B");

                   OutputSetInfo(values.ToList<string>(),"A与B并集");

                   Response.Write("<br />");

         }

运行上述实例代码,在IE浏览器中查看Union操 作的结果,如图5.4所示。其中,集合A和B的值分别为“{A,B,B,C,D,D,E}”和““{A,C,C,F,H}””,集合A和B的并集的值为 “{A,B,C,D,E,F,H}”。

精通 LINQ数据访问技术 - 每天积累一点 - 学无止境

图5.4  Union操作的结果

  评论这张
 
阅读(1039)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018