webabcd - 专注于asp.net

ASP.NET
从现在开始 一切都不晚
posts - 149, comments - 4064, trackbacks - 328, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
[索引页]
[源码下载]


步步为营VS 2008 + .NET 3.5(6) - LINQ查询操作符之Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingleOrDefault、Reverse、SelectMany


作者:webabcd


介绍
    ·Distinct - 过滤集合中的相同项;延迟
    ·Union - 连接不同集合,自动过滤相同项;延迟
    ·Concat - 连接不同集合,不会自动过滤相同项;延迟
    ·Intersect - 获取不同集合的相同项(交集);延迟
    ·Except - 从某集合中删除其与另一个集合中相同的项;延迟
    ·Skip - 跳过集合的前n个元素;延迟
    ·Take - 获取集合的前n个元素;延迟
    ·SkipWhile - 直到某一条件成立就停止跳过;延迟
    ·TakeWhile - 直到某一条件成立就停止获取;延迟
    ·Single - 根据表达式返回集合中的某一元素;不延迟
    ·SingleOrDefault - 根据表达式返回集合中的某一元素(如果没有则返回默认值);不延迟
    ·Reverse - 对集合反向排序;延迟
    ·SelectMany - Select选择(一对多);延迟


示例
Summary2.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;

using System.Collections.Generic;
using DAL;

public partial class LINQ_Summary2 : System.Web.UI.Page
{
    NorthwindDataContext _ctx 
= new NorthwindDataContext();
    
string[] _ary = null;

    
protected void Page_Load(object sender, EventArgs e)
    
{
        _ary 
= new string[] "asp.net""csharp""xhtml""css""javascript""wcf""wpf"
            
"asp.net""csharp""xhtml""css""javascript"
            
"silverlight""linq""wf""sqlserver""asp.net ajax""ssis""ssas""ssrs" }
;

        
// Distinct - 过滤集合中的相同项;延迟
        Summary_Distinct();

        
// Union - 连接不同集合,自动过滤相同项;延迟
        Summary_Union();

        
// Concat - 连接不同集合,不会自动过滤相同项;延迟
        Summary_Concat();

        
// Intersect - 获取不同集合的相同项(交集);延迟
        Summary_Intersect();

        
// Except - 从某集合中删除其与另一个集合中相同的项;延迟
        Summary_Except();

        
// Skip - 跳过集合的前n个元素;延迟
        
// Take - 获取集合的前n个元素;延迟
        Summary_Skip_Take();

        
// SkipWhile - 直到某一条件成立就停止跳过;延迟
        
// TakeWhile - 直到某一条件成立就停止获取;延迟
        Summary_SkipWhile_TakeWhile();

        
// Single - 根据表达式返回集合中的某一元素;不延迟
        
// SingleOrDefault - 根据表达式返回集合中的某一元素(如果没有则返回默认值);不延迟
        Summary_Single_SingleOrDefault();

        
// Reverse - 对集合反向排序;延迟
        Summary_Reverse();

        
// SelectMany - Select选择(一对多);延迟
        Summary_SelectMany();
    }

}

Distinct - 过滤集合中的相同项;延迟
    /// <summary>
    
/// Distinct - 过滤集合中的相同项;延迟
    
/// </summary>

    void Summary_Distinct()
    
{
        var ary 
= (from a in _ary
                   select a).Distinct();

        
foreach (string s in ary)
        
{
            result.InnerHtml 
+= s + "<br />";
        }

        result.InnerHtml 
+= "<br />";
    }

运行结果
asp.net
csharp
xhtml
css
javascript
wcf
wpf
silverlight
linq
wf
sqlserver
asp.net ajax
ssis
ssas
ssrs


Union - 连接不同集合,自动过滤相同项;延迟
    /// <summary>
    
/// Union - 连接不同集合,自动过滤相同项;延迟
    
/// </summary>

    void Summary_Union()
    
{
        var ary 
= (from a in _ary
                   select a).Take(
3).Union((from a in _ary
                                            select a).Take(
6));

        
foreach (string s in ary)
        
{
            result.InnerHtml 
+= s + "<br />";
        }

        result.InnerHtml 
+= "<br />";
    }

运行结果
asp.net
csharp
xhtml
css
javascript
wcf


Concat - 连接不同集合,不会自动过滤相同项;延迟
    /// <summary>
    
/// Concat - 连接不同集合,不会自动过滤相同项;延迟
    
/// </summary>

    void Summary_Concat()
    
{
        var ary 
= (from a in _ary
                   select a).Take(
3).Concat((from a in _ary
                                             select a).Take(
6));

        
foreach (string s in ary)
        
{
            result.InnerHtml 
+= s + "<br />";
        }

        result.InnerHtml 
+= "<br />";
    }
运行结果
asp.net
csharp
xhtml
asp.net
csharp
xhtml
css
javascript
wcf

Intersect - 获取不同集合的相同项(交集);延迟
    /// <summary>
    
/// Intersect - 获取不同集合的相同项(交集);延迟
    
/// </summary>

    void Summary_Intersect()
    
{
        var ary 
= (from a in _ary
                   select a).Take(
3).Intersect((from a in _ary
                                                select a).Skip(
1).Take(3));

        
foreach (string s in ary)
        
{
            result.InnerHtml 
+= s + "<br />";
        }

        result.InnerHtml 
+= "<br />";
    }

运行结果
csharp
xhtml

Except - 从某集合中删除其与另一个集合中相同的项;延迟
    /// <summary>
    
/// Except - 从某集合中删除其与另一个集合中相同的项;延迟
    
/// </summary>

    void Summary_Except()
    
{
        var ary 
= (from a in _ary
                   select a).Take(
3).Except((from a in _ary
                                             select a).Skip(
1).Take(3));

        
foreach (string s in ary)
        
{
            result.InnerHtml 
+= s + "<br />";
        }

        result.InnerHtml 
+= "<br />";
    }
运行结果
asp.net

Skip - 跳过集合的前n个元素;延迟
Take - 获取集合的前n个元素;延迟
    /// <summary>
    
/// Skip - 跳过集合的前n个元素;延迟
    
/// Take - 获取集合的前n个元素;延迟
    
/// </summary>

    void Summary_Skip_Take()
    
{
        var ary 
= (from a in _ary
                   select a).Skip(
2).Take(3);

        
foreach (string s in ary)
        
{
            result.InnerHtml 
+= s + "<br />";
        }

        result.InnerHtml 
+= "<br />";
    }
运行结果
xhtml
css
javascript


SkipWhile - 直到某一条件成立就停止跳过;延迟
TakeWhile - 直到某一条件成立就停止获取;延迟
    /// <summary>
    
/// SkipWhile - 直到某一条件成立就停止跳过;延迟
    
/// TakeWhile - 直到某一条件成立就停止获取;延迟
    
/// </summary>

    void Summary_SkipWhile_TakeWhile()
    
{
        var ary 
= (from a in _ary
                   select a).SkipWhile(s 
=> s.Length < 8).TakeWhile(s => s.Length > 2);

        
foreach (string s in ary)
        
{
            result.InnerHtml 
+= s + "<br />";
        }

        result.InnerHtml 
+= "<br />";
    }
运行结果
javascript
wcf
wpf
asp.net
csharp
xhtml
css
javascript
silverlight
linq


Single - 根据表达式返回集合中的某一元素;不延迟
SingleOrDefault - 根据表达式返回集合中的某一元素(如果没有则返回默认值);不延迟
    /// <summary>
    
/// Single - 根据表达式返回集合中的某一元素;不延迟
    
/// SingleOrDefault - 根据表达式返回集合中的某一元素(如果没有则返回默认值);不延迟
    
/// </summary>

    void Summary_Single_SingleOrDefault()
    
{
        
string s = (from a in _ary
                    select a).Single(a 
=> a == "silverlight");
        
// string s = (from a in _ary
        
//             select a).SingleOrDefault(a => a == "xxx");
        
// s == null

        result.InnerHtml 
+= s + "<br />";
        result.InnerHtml 
+= "<br />";
    }
运行结果
silverlight

Reverse - 对集合反向排序;延迟
    /// <summary>
    
/// Reverse - 对集合反向排序;延迟
    
/// </summary>

    void Summary_Reverse()
    
{
        var ary 
= (from a in _ary
                   orderby a.Length ascending
                   select a).Reverse();

        
foreach (string s in ary)
        
{
            result.InnerHtml 
+= s + "<br />";
        }

        result.InnerHtml 
+= "<br />";
    }
运行结果
asp.net ajax
silverlight
javascript
javascript
sqlserver
asp.net
asp.net
csharp
csharp
xhtml
xhtml
ssrs
ssas
ssis
linq
css
wpf
wcf
css
wf


SelectMany - Select选择(一对多);延迟
    /// <summary>
    
/// SelectMany - Select选择(一对多);延迟
    
/// </summary>

    void Summary_SelectMany()
    
{
        var ary 
= (from a in _ary
                   where a.Contains(
".")
                   select a).SelectMany(a 
=> a.Split('.'));

        
foreach (string s in ary)
        
{
            result.InnerHtml 
+= s + "<br />";
        }

        result.InnerHtml 
+= "<br />";
    }
运行结果
asp
net
asp
net
asp
net ajax



OK
[源码下载]

Feedback

#1楼    回复  引用    

2007-10-16 08:39 by ivw [未注册用户]
沙发。。。。。呵呵 

怎么兄弟的BLOG板面变样了啊?

#2楼 [楼主]   回复  引用  查看    

2007-10-16 08:59 by webabcd      
@ivw
呵呵
标题的问题
已经改好了

#3楼    回复  引用    

2007-10-16 17:08 by ivw [未注册用户]
呵呵,是你改变了还是BLOG本身的问题啊?

#4楼 [楼主]   回复  引用  查看    

2007-10-16 18:29 by webabcd      
@ivw
应该是这个模板的CSS问题
懒得查具体原因了

#5楼    回复  引用    

2007-10-16 22:18 by 黑白 [未注册用户]
越来越佩服兄弟了,很喜欢你的文章风格
严重支持

#6楼 [楼主]   回复  引用  查看    

2007-10-17 07:48 by webabcd      
@黑白
:)
努力中……

#7楼    回复  引用  查看    

2007-10-19 15:07 by birdshome      
博客园highlight C#的代码需要修改了,var form select都不支持

#8楼 [楼主]   回复  引用  查看    

2007-10-19 15:43 by webabcd      
@birdshome
是啊
要麻烦dudu了

#9楼    回复  引用    

2007-12-11 00:36 by 陆建华 [未注册用户]
请问在从Northwind数据库中拖几表到LINQ TO SQL编辑器中时,老是弹出一个对话框,内容是"所选对象使用不支持数据提供程序".该如何解决?谢谢~~

#10楼 [楼主]   回复  引用  查看    

2007-12-11 09:33 by webabcd      
@陆建华
不会啊
我这里没问题的

#11楼    回复  引用    

2007-12-11 11:01 by 陆建华 [未注册用户]
我已经解决拉,在VS2008中LINQ to SQL类中是不支持Access和Orcale数据库的.我原先是用的Access2003的北风数据库,所以才会出现那样的问题.谢谢~~~

#12楼 [楼主]   回复  引用  查看    

2007-12-11 12:23 by webabcd      
@陆建华
:)
呵呵,现在只支持sqlserver

#13楼    回复  引用    

2007-12-12 16:21 by 陆建华 [未注册用户]
@webabcd
能告诉我 你的邮箱吗?方便联系.

#14楼 [楼主]   回复  引用  查看    

2007-12-12 17:45 by webabcd      
@陆建华
:)
email:
webabcd
gmail
com

msn:
webabcd
hotmail
com

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-02-13 18:26 编辑过