C# LINQ学习(3个例子)

本文展示了如何使用LINQ对打乱顺序的诗句进行排序、合并两个数据源中的诗句并逐句拼接,以及从两个数据源中读出每句诗并输出。通过实际代码示例说明了数据操作过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文中的内容是3个学习LINQ写时的代码段

场景1:对打乱顺序的诗句进行排序

按DataTable的列Number,对DataTable中的行进行排序,最后按序输出Content列

/// <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中的诗句合并为一首诗

按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中的诗句逐句拼接

将每句诗分成三部分,前一个数据源有前两部分,后一个数据源有后两部分(中间那部分两个数据源都有),从两个数据源中读出每句诗,并输出

/// <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函数调用

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

    Console.ReadLine();
}

运行结果

225244_KZkd_1425762.png

END

转载于:https://my.oschina.net/Tsybius2014/blog/300939

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值