C# LINQ學習(3個例子)

本文中的內容是3個學習LINQ寫時的代碼段函數

場景1:對打亂順序的詩句進行排序學習

按DataTable的列Number,對DataTable中的行進行排序,最後按序輸出Content列spa

/// <summary>
/// 場景1:對打亂順序的詩句進行排序
/// </summary>
public static void Scene1()
{
    //數據源
    DataTable dt = new DataTable();

    dt.Columns.Add("Number"); //序號
    dt.Columns.Add("Content"); //詩句

    //打亂順序的詩句
    dt.Rows.Add("0", "《詩·商頌·玄鳥》");
    dt.Rows.Add("9", "景員維河,殷受命咸宜,百祿是何。");
    dt.Rows.Add("2", "古帝命武湯,正域彼四方。");
    dt.Rows.Add("7", "邦畿千里,維民所止,肇域彼四海。");
    dt.Rows.Add("4", "商之前後,受命不殆,在武丁孫子。");
    dt.Rows.Add("5", "武丁孫子,武王靡不勝。");
    dt.Rows.Add("6", "龍旂十乘,大糦是承。");
    dt.Rows.Add("3", "方命厥後,奄有九有。");
    dt.Rows.Add("8", "窈窕淑女,琴瑟友之。");
    dt.Rows.Add("1", "天命玄鳥,降而生商,宅殷土芒芒。");

    //按順序排列詩句
    IEnumerable<string> array =
        from n in dt.AsEnumerable()
        orderby int.Parse(n["Number"].ToString()) ascending
        select n["Content"].ToString();

    //輸出結果
    foreach (var v in array)
    {
        Console.WriteLine(v);
    }
}

場景2:將分放在兩個DataTable中的詩句合併爲一首詩code

按DataTable中的列Number,對兩個DataTable中合併後的詩句進行排序,並按序輸出合併後的Content列的內容排序

/// <summary>
/// 場景2:將分放在兩個DataTable中的詩句合併爲一首詩
/// </summary>
public static void Scene2()
{
    //數據源1
    DataTable dt1 = new DataTable();
    dt1.Columns.Add("Number"); //序號
    dt1.Columns.Add("Content"); //詩句
    DataTable dt2 = dt1.Clone(); //數據源2

    //把一首詩的詩句分放到兩個數據源中
    dt1.Rows.Add("0", "《詩·王風·黍離》");
    dt2.Rows.Add("1", "彼黍離離,彼稷之苗。行邁靡靡,中心搖搖。");
    dt1.Rows.Add("2", "知我者,謂我心憂;不知我者,謂我何求。");
    dt2.Rows.Add("3", "悠悠蒼天,此何人哉?");
    dt1.Rows.Add("4", "彼黍離離,彼稷之穗。行邁靡靡,中心如醉。");
    dt2.Rows.Add("5", "知我者,謂我心憂;不知我者,謂我何求。");
    dt1.Rows.Add("6", "悠悠蒼天,此何人哉?");
    dt2.Rows.Add("7", "彼黍離離,彼稷之實。行邁靡靡,中心如噎。");
    dt1.Rows.Add("8", "知我者,謂我心憂;不知我者,謂我何求。");
    dt2.Rows.Add("9", "悠悠蒼天,此何人哉?");

    //合併,按順序將兩個數據源的詩句合併
    IEnumerable<string> array =
        from n1 in dt1.AsEnumerable().Concat(dt2.AsEnumerable())
        orderby int.Parse(n1["Number"].ToString()) ascending
        select n1["Content"].ToString();

    //輸出結果
    foreach (var v in array)
    {
        Console.WriteLine(v);
    }
}

場景3:將分放在兩個DataTable中的詩句逐句拼接string

將每句詩分紅三部分,前一個數據源有前兩部分,後一個數據源有後兩部分(中間那部分兩個數據源都有),從兩個數據源中讀出每句詩,並輸出it

/// <summary>
/// 場景3:將分放在兩個DataTable中的詩句逐句拼接
/// </summary>
public static void Scene3()
{
    Console.WriteLine("《詩·小雅·鹿鳴》");

    //數據源1
    DataTable dt1 = new DataTable();
    dt1.Columns.Add("Number"); //序號
    dt1.Columns.Add("Content1"); //詩句片斷1
    dt1.Columns.Add("Content2"); //詩句片斷2

    dt1.Rows.Add("0", "呦呦鹿鳴,", "食野之苹。我有嘉賓,");
    dt1.Rows.Add("1", "吹笙鼓簧,", "承筐是將。人之好我,");
    dt1.Rows.Add("2", "呦呦鹿鳴,", "食野之蒿。我有嘉賓,");
    dt1.Rows.Add("3", "視民不恌,", "君子是則是效。我有旨酒,");
    dt1.Rows.Add("4", "呦呦鹿鳴,", "食野之芩。我有嘉賓,");
    dt1.Rows.Add("5", "鼓瑟鼓琴,", "和樂且湛。我有旨酒,");

    DataTable dt2 = new DataTable();
    dt2.Columns.Add("Content2"); //詩句片斷2
    dt2.Columns.Add("Content3"); //詩句片斷3

    dt2.Rows.Add("食野之苹。我有嘉賓,", "鼓瑟吹笙。");
    dt2.Rows.Add("承筐是將。人之好我,", "示我周行。");
    dt2.Rows.Add("食野之蒿。我有嘉賓,", "德音孔昭。");
    dt2.Rows.Add("君子是則是效。我有旨酒,", "嘉賓式燕以敖。");
    dt2.Rows.Add("食野之芩。我有嘉賓,", "鼓瑟鼓琴。");
    dt2.Rows.Add("和樂且湛。我有旨酒,", "以燕樂嘉賓之心。");

    //合併:詩句片斷1+詩句片斷2+詩句片斷3
    IEnumerable<string> array =
        from n1 in dt1.AsEnumerable()
        from n2 in dt2.AsEnumerable()
        where n1["Content2"].ToString() == n2["Content2"].ToString()
        select (
            n1["Content1"].ToString() + 
            n1["Content2"].ToString() + 
            n2["Content3"].ToString());

    //輸出結果
    foreach (var v in array)
    {
        Console.WriteLine(v);
    }
}

Main函數調用class

static void Main(string[] args)
{
    Console.WriteLine("=============");
    Scene1();
    Console.WriteLine("=============");
    Scene2();
    Console.WriteLine("=============");
    Scene3();
    Console.WriteLine("=============");

    Console.ReadLine();
}

運行結果foreach

ENDselect

相關文章
相關標籤/搜索