LINQ Learning-GroupingOperators(分组)

  最近在网上找到一个关于LINQ学习的例子,它将不同的操作分不同的项目来讲,今天先来看一下group....by...

  先看一下这里的数据构造是怎么做的。  

        DataSet ds = new DataSet();                                 //先实例化一个DataSet
            ds.Tables.Add(CreateNumbersTable());
            private static DataTable CreateNumbersTable()               //添加Table到ds
            {

                int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
                DataTable table = new DataTable("Numbers");             //实例化一个名为Numbers的Table
                table.Columns.Add("number", typeof(int));               //添加一列名为number,类型为int

                foreach (int n in numbers)
                {
                    table.Rows.Add(new object[] { n });                 //将数据添加到table
                }

                return table;                                           //返回table
            }   

GroupingOperators   

        1>按数字分组,这里的例子是按数字除以5以后的余数来分组的。     

         //从Numbers表获取数据
                var numbers = ds.Tables["Numbers"].AsEnumerable();      
                //将数据按除以5后的余数 分组
                var numberGroups =
                    from n in numbers
                    group n by n.Field<int>("number") % 5 into g
                    select new { Remainder = g.Key, Numbers = g };
                //将分组后的 数输出
                foreach (var m in numberGroups)
                {
                    Console.WriteLine("Numbers with a remainder of {0} when divided by 5:", m.Remainder);
                    foreach (var x in m.Numbers)
                    {
                        Console.WriteLine(x.Field<int>("number"));
                    }
                }

     AsEnumerable:这里是延迟加载的意思。

      Field<列的类型>("列的名称")

      group n by n.Field<int>("number") % 5 into g:将n按n的number列的数据除以5的余数(n.Field<int>("number") % 5)分组放入g中

      select new {Remainder=g.Key,Number=g}:key=Remainder=g.Key,value=Number=g

      2>按字符串首字母分组      

 group w by w.Field<string>("word")[0] into g
 select new { FirstLetter = g.Key, Words = g };

     Field<string>("word")[0]:word列值得首字母

      3>按某一字段分类(将商品按Category分类)      

group p by p.Field<string>("Category") into g
select new { Category = g.Key, Products = g };

       4>GroupBy-Comparer

      数据:string[] anagrams = { "from   ", " salt", " earn ", "  last   ", " near ", " form  " };      

var orderGroups = anagrams.GroupBy(
                    w => w.Field<string>("anagram").Trim(),
                    new AnagramEqualityComparer());

           

var orderGroups = anagrams.GroupBy(
                    w => w.Field<string>("anagram").Trim());

      

     5>GroupBy-Comaparer,Mapped      

var orderGroups = anagrams.GroupBy(
                    w => w.Field<string>("anagram").Trim(),
                    a => a.Field<string>("anagram").ToUpper(),
                    new AnagramEqualityComparer()
                    );

        

 

    

 

转载于:https://www.cnblogs.com/feiDD/articles/3054368.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值