c# LINQ查詢操作符實例操作總結2

介紹
    ·Distinct - 過濾集合中的相同項;延遲
    ·Union - 連接不同集合,自動過濾相同項;延遲
    ·Concat - 連接不同集合,不會自動過濾相同項;延遲
    ·Intersect - 獲取不同集合的相同項(交集);延遲
    ·Except - 從某集合中刪除其與另一個集合中相同的項;延遲
    ·Skip - 跳過集合的前n個元素;延遲
    ·Take - 獲取集合的前n個元素;延遲
    ·SkipWhile - 直到某一條件成立就停止跳過;延遲
    ·TakeWhile - 直到某一條件成立就停止獲取;延遲
    ·Single - 根據表達式返回集合中的某一元素;不延遲
    ·SingleOrDefault - 根據表達式返回集合中的某一元素(如果沒有則返回默認值);不延遲
    ·Reverse - 對集合反向排序;延遲
    ·SelectMany - Select選擇(一對多);延遲


示例
Summary2.aspx.cs
  1. using System;  
  2. using System.Data;  
  3. using System.Configuration;  
  4. using System.Collections;  
  5. using System.Linq;  
  6. using System.Web;  
  7. using System.Web.Security;  
  8. using System.Web.UI;  
  9. using System.Web.UI.WebControls;  
  10. using System.Web.UI.WebControls.WebParts;  
  11. using System.Web.UI.HtmlControls;  
  12. using System.Xml.Linq;  
  13.   
  14. using System.Collections.Generic;  
  15. using DAL;  
  16.   
  17. public partial class LINQ_Summary2 : System.Web.UI.Page  
  18. {  
  19.     NorthwindDataContext _ctx = new NorthwindDataContext();  
  20.     string[] _ary = null;  
  21.   
  22.     protected void Page_Load(object sender, EventArgs e)  
  23.     {  
  24.         _ary = new string[] { "asp.net""csharp""xhtml""css""javascript""wcf""wpf",   
  25.             "asp.net""csharp""xhtml""css""javascript",   
  26.             "silverlight""linq""wf""sqlserver""asp.net ajax""ssis""ssas""ssrs" };  
  27.   
  28.         // Distinct - 過濾集合中的相同項;延遲   
  29.         Summary_Distinct();  
  30.   
  31.         // Union - 連接不同集合,自動過濾相同項;延遲   
  32.         Summary_Union();  
  33.   
  34.         // Concat - 連接不同集合,不會自動過濾相同項;延遲   
  35.         Summary_Concat();  
  36.   
  37.         // Intersect - 獲取不同集合的相同項(交集);延遲   
  38.         Summary_Intersect();  
  39.   
  40.         // Except - 從某集合中刪除其與另一個集合中相同的項;延遲   
  41.         Summary_Except();  
  42.   
  43.         // Skip - 跳過集合的前n個元素;延遲   
  44.         // Take - 獲取集合的前n個元素;延遲   
  45.         Summary_Skip_Take();  
  46.   
  47.         // SkipWhile - 直到某一條件成立就停止跳過;延遲   
  48.         // TakeWhile - 直到某一條件成立就停止獲取;延遲   
  49.         Summary_SkipWhile_TakeWhile();  
  50.   
  51.         // Single - 根據表達式返回集合中的某一元素;不延遲   
  52.         // SingleOrDefault - 根據表達式返回集合中的某一元素(如果沒有則返回默認值);不延遲   
  53.         Summary_Single_SingleOrDefault();  
  54.   
  55.         // Reverse - 對集合反向排序;延遲   
  56.         Summary_Reverse();  
  57.   
  58.         // SelectMany - Select選擇(一對多);延遲   
  59.         Summary_SelectMany();  
  60.     }  
  61. }  
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 - 過濾集合中的相同項;延遲
  1. /// <summary>   
  2.     /// Distinct - 過濾集合中的相同項;延遲   
  3.     /// </summary>   
  4.     void Summary_Distinct()  
  5.     {  
  6.         var ary = (from a in _ary  
  7.                    select a).Distinct();  
  8.   
  9.         foreach (string s in ary)  
  10.         {  
  11.             result.InnerHtml += s + "<br />";  
  12.         }  
  13.         result.InnerHtml += "<br />";  
  14.     }  
/// <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 - 連接不同集合,自動過濾相同項;延遲
  1. /**//// <summary>  
  2.     /// Union - 連接不同集合,自動過濾相同項;延遲   
  3.     /// </summary>   
  4.     void Summary_Union()  
  5.     {  
  6.         var ary = (from a in _ary  
  7.                    select a).Take(3).Union((from a in _ary  
  8.                                             select a).Take(6));  
  9.   
  10.         foreach (string s in ary)  
  11.         {  
  12.             result.InnerHtml += s + "<br />";  
  13.         }  
  14.         result.InnerHtml += "<br />";  
  15.     }  
/**//// <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 - 連接不同集合,不會自動過濾相同項;延遲
  1. /**//// <summary>  
  2.    /// Concat - 連接不同集合,不會自動過濾相同項;延遲   
  3.    /// </summary>   
  4.    void Summary_Concat()  
  5.    {  
  6.        var ary = (from a in _ary  
  7.                   select a).Take(3).Concat((from a in _ary  
  8.                                             select a).Take(6));  
  9.   
  10.        foreach (string s in ary)  
  11.        {  
  12.            result.InnerHtml += s + "<br />";  
  13.        }  
  14.        result.InnerHtml += "<br />";  
  15.    }  
 /**//// <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 - 獲取不同集合的相同項(交集);延遲
  1. /**//// <summary>  
  2. /// Intersect - 獲取不同集合的相同項(交集);延遲   
  3. /// </summary>   
  4. void Summary_Intersect()  
  5. {  
  6.     var ary = (from a in _ary  
  7.                select a).Take(3).Intersect((from a in _ary  
  8.                                             select a).Skip(1).Take(3));  
  9.   
  10.     foreach (string s in ary)  
  11.     {  
  12.         result.InnerHtml += s + "<br />";  
  13.     }  
  14.     result.InnerHtml += "<br />";  
  15. }  
    /**//// <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 - 從某集合中刪除其與另一個集合中相同的項;延遲
  1. /**//// <summary>  
  2. /// Except - 從某集合中刪除其與另一個集合中相同的項;延遲   
  3. /// </summary>   
  4. void Summary_Except()  
  5. {  
  6.     var ary = (from a in _ary  
  7.                select a).Take(3).Except((from a in _ary  
  8.                                          select a).Skip(1).Take(3));  
  9.   
  10.     foreach (string s in ary)  
  11.     {  
  12.         result.InnerHtml += s + "<br />";  
  13.     }  
  14.     result.InnerHtml += "<br />";  
  15. }  
    /**//// <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個元素;延遲
  1. /**//// <summary>  
  2. /// Skip - 跳過集合的前n個元素;延遲   
  3. /// Take - 獲取集合的前n個元素;延遲   
  4. /// </summary>   
  5. void Summary_Skip_Take()  
  6. {  
  7.     var ary = (from a in _ary  
  8.                select a).Skip(2).Take(3);  
  9.   
  10.     foreach (string s in ary)  
  11.     {  
  12.         result.InnerHtml += s + "<br />";  
  13.     }  
  14.     result.InnerHtml += "<br />";  
  15. }  
    /**//// <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 - 直到某一條件成立就停止獲取;延遲
  1. /**//// <summary>  
  2. /// SkipWhile - 直到某一條件成立就停止跳過;延遲   
  3. /// TakeWhile - 直到某一條件成立就停止獲取;延遲   
  4. /// </summary>   
  5. void Summary_SkipWhile_TakeWhile()  
  6. {  
  7.     var ary = (from a in _ary  
  8.                select a).SkipWhile(s => s.Length < 8).TakeWhile(s => s.Length > 2);  
  9.   
  10.     foreach (string s in ary)  
  11.     {  
  12.         result.InnerHtml += s + "<br />";  
  13.     }  
  14.     result.InnerHtml += "<br />";  
  15. }  
    /**//// <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 - 根據表達式返回集合中的某一元素(如果沒有則返回默認值);不延遲
  1. /**//// <summary>  
  2. /// Single - 根據表達式返回集合中的某一元素;不延遲   
  3. /// SingleOrDefault - 根據表達式返回集合中的某一元素(如果沒有則返回默認值);不延遲   
  4. /// </summary>   
  5. void Summary_Single_SingleOrDefault()  
  6. {  
  7.     string s = (from a in _ary  
  8.                 select a).Single(a => a == "silverlight");  
  9.     // string s = (from a in _ary   
  10.     //             select a).SingleOrDefault(a => a == "xxx");   
  11.     // s == null   
  12.   
  13.     result.InnerHtml += s + "<br />";  
  14.     result.InnerHtml += "<br />";  
  15. }  
    /**//// <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 - 對集合反向排序;延遲
  1. /**//// <summary>  
  2. /// Reverse - 對集合反向排序;延遲   
  3. /// </summary>   
  4. void Summary_Reverse()  
  5. {  
  6.     var ary = (from a in _ary  
  7.                orderby a.Length ascending  
  8.                select a).Reverse();  
  9.   
  10.     foreach (string s in ary)  
  11.     {  
  12.         result.InnerHtml += s + "<br />";  
  13.     }  
  14.     result.InnerHtml += "<br />";  
  15. }  
    /**//// <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選擇(一對多);延遲
  1. /**//// <summary>  
  2. /// SelectMany - Select選擇(一對多);延遲   
  3. /// </summary>   
  4. void Summary_SelectMany()  
  5. {  
  6.     var ary = (from a in _ary  
  7.                where a.Contains(".")  
  8.                select a).SelectMany(a => a.Split('.'));  
  9.   
  10.     foreach (string s in ary)  
  11.     {  
  12.         result.InnerHtml += s + "<br />";  
  13.     }  
  14.     result.InnerHtml += "<br />";  
  15. }  
    /**//// <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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章