[Category("Grouping Operators")]
[Description("This sample uses group by to partition a list of numbers by " +
"their remainder when divided by 5.")]
public void DataSetLinq40()
{ var numbers = testDS.Tables["Numbers"].AsEnumerable();//testDS DataSet
foreach (var n in numbers)
{
Console.Write(n.Field<int>("number")+",");
}
Console.WriteLine();
var numberGroups =
from n in numbers
group n by n.Field<int>("number") % into g
select new { Remainder = g.Key, Numbers = g }; foreach (var g in numberGroups)
{
Console.WriteLine("Numbers with a remainder of {0} when divided by 5:", g.Remainder);
foreach (var n in g.Numbers)
{
Console.WriteLine(n.Field<int>("number"));
}
}
Console.ReadLine();
}

运行结果(按照数字求余5的值分组):

             [Category("Grouping Operators")]
[Description("This sample uses group by to partition a list of words by " +
"their first letter.")]
public void DataSetLinq41()
{ var words4 = testDS.Tables["Words4"].AsEnumerable();
foreach (var g in words4)
{
Console.Write(g.Field<string>("word")+",");
}
Console.WriteLine();
var wordGroups =
from w in words4
group w by w.Field<string>("word")[] into g
select new { FirstLetter = g.Key, Words = g }; foreach (var g in wordGroups)
{
Console.WriteLine("Words that start with the letter '{0}':", g.FirstLetter);
foreach (var w in g.Words)
{
Console.WriteLine(w.Field<string>("word"));
}
}
Console.ReadLine();
}

运行结果(按照首字母分组):

             [Category("Grouping Operators")]
[Description("This sample uses group by to partition a list of products by category.")]
public void DataSetLinq42()
{ var products = testDS.Tables["Products"].AsEnumerable(); var productGroups =
from p in products
group p by p.Field<string>("Category") into g
select new { Category = g.Key, Products = g }; foreach (var g in productGroups)
{
Console.WriteLine("Category: {0}", g.Category);
foreach (var w in g.Products)
{
Console.WriteLine("\t" + w.Field<string>("ProductName"));
}
}
Console.ReadLine();
}

运行结果(按照产品类别分组):

             [Category("Grouping Operators")]
[Description("This sample uses group by to partition a list of each customer's orders, " +
"first by year, and then by month.")]
public void DataSetLinq43()
{ var customers = testDS.Tables["Customers"].AsEnumerable(); var customerOrderGroups =
from c in customers
select
new
{
CompanyName = c.Field<string>("CompanyName"),
YearGroups =
from o in c.GetChildRows("CustomersOrders")
group o by o.Field<DateTime>("OrderDate").Year into yg
select
new
{
Year = yg.Key,
MonthGroups =
from o in yg
group o by o.Field<DateTime>("OrderDate").Month into mg
select new { Month = mg.Key, Orders = mg }
}
}; foreach (var cog in customerOrderGroups)
{
Console.WriteLine("CompanyName= {0}", cog.CompanyName);
foreach (var yg in cog.YearGroups)
{
Console.WriteLine("\t Year= {0}", yg.Year);
foreach (var mg in yg.MonthGroups)
{
Console.WriteLine("\t\t Month= {0}", mg.Month);
foreach (var order in mg.Orders)
{
Console.WriteLine("\t\t\t OrderID= {0} ", order.Field<int>("OrderID"));
Console.WriteLine("\t\t\t OrderDate= {0} ", order.Field<DateTime>("OrderDate"));
}
}
}
}
Console.ReadLine();
}

DataTable:

运行结果(对每个客户的订单按年再按月分组):

 [Category("Grouping Operators")]
[Description("This sample uses GroupBy to partition trimmed elements of an array using " +
"a custom comparer that matches words that are anagrams of each other.")]
public void DataSetLinq44()
{ var anagrams = testDS.Tables["Anagrams"].AsEnumerable(); var orderGroups = anagrams.GroupBy(w => w.Field<string>("anagram").Trim(), new AnagramEqualityComparer()); foreach (var g in orderGroups)
{
Console.WriteLine("Key: {0}", g.Key);
foreach (var w in g)
{
Console.WriteLine("\t" + w.Field<string>("anagram"));
}
}
} [Category("Grouping Operators")]
[Description("This sample uses GroupBy to partition trimmed elements of an array using " +
"a custom comparer that matches words that are anagrams of each other, " +
"and then converts the results to uppercase.")]
public void DataSetLinq45()
{ var anagrams = testDS.Tables["Anagrams"].AsEnumerable(); var orderGroups = anagrams.GroupBy(
w => w.Field<string>("anagram").Trim(),
a => a.Field<string>("anagram").ToUpper(),
new AnagramEqualityComparer()
); foreach (var g in orderGroups)
{
Console.WriteLine("Key: {0}", g.Key);
foreach (var w in g)
{
Console.WriteLine("\t" + w);
}
}
}

内容源自:http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

Linq:Grouping Operators的更多相关文章

  1. Linq编程101例

    原文地址:101 LINQ Samples in C# Part1 - Restriction Operators Part2 - Projection Operators Part3 - Parti ...

  2. 101个LINQ示例,包含几乎全部操作

    Restriction Operators Where - Simple public void Linq1() { , , , , , , , , , }; var lowNums = from n ...

  3. LINQ 学习路程 -- 查询操作 GroupBy ToLookUp

    Grouping Operators Description GroupBy GroupBy操作返回根据一些键值进行分组,每组代表IGrouping<TKey,TElement>对象 To ...

  4. Flume interceptor 使用注意事项

    1. 在使用 Regex Filtering Interceptor的时候一个属性是excludeEvents 当它的值为true 的时候,过滤掉匹配到当前正则表达式的一行 当它的值为false的时候 ...

  5. 【翻译】Flume 1.8.0 User Guide(用户指南) Processors

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  6. tfs二次开发-利用tfs api做查询

    参考地址:https://msdn.microsoft.com/en-us/library/bb130306(v=vs.120).aspx You can query for bugs, tasks, ...

  7. Threading in C# 5

    Part 5: Parallel Programming In this section, we cover the multithreading APIs new to Framework 4.0 ...

  8. Rx (Reactive Extensions)

    The Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using ...

  9. matlab 正则表达式

    regexprep Replace text using regular expression collapse all in page Syntax newStr = regexprep(str,e ...

随机推荐

  1. Django学习笔记之Django模版系统

    官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特 ...

  2. 深入理解JVM4——线程安全

    浅谈java内存模型 不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的.其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序 ...

  3. SSO 证书配置

    ssodev.crt为开发环境证书ssotest.crt为测试环境证书 将证书拷贝到目录:{JDK}\jre\lib\security 其中 {JDK} 是实际安装JDK的位置.然后cmd进入命令窗口 ...

  4. qtjambi_编译

    ZC: 写文章时间为 20160716 1. 1.1.在 Win7x64中编译不成功,主要原因是 源码中包含的程序generator.exe出现内存错误 ==> 于是,转到 虚拟机XPsp3中编 ...

  5. 用HyperMesh(7.0)手工修改网格

    检查网格质量并修改 2D->qulifyindex:其中View/Edit/Optimize工具栏功能常用,尤其是Edit页中的Place Node,可以动态地拖动节点并观察单元质量是否符合要求 ...

  6. ActiveMQ 性能调优

    本章重点 学习普通的性能调优技巧 怎么优化生产者和消费者 调优实例 简介 ActiveMQ 的性能高度依赖于多种不同的因素,包括:网络代理拓扑架构,传输层,底层网络的服务质量和速度,硬件,操作系统和 ...

  7. oracle,查看锁表

    (1)锁表查询的代码有以下的形式:select count(*) from v$locked_object;select * from v$locked_object;(2)查看哪个表被锁select ...

  8. C++(十八) — 内存模式、堆和栈

    1.内存模式 一个程序执行时,先复制到内存,然后CPU逐句读取指令执行. 每个存储单元存放一个字节(8bit)数据,每个有一个唯一的地址,地址是顺序编码的.比如:一台计算机256MB内存,则有256* ...

  9. Python之paramiko

    一.基础 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BSD, MacOS X ...

  10. CUDA初试

    1.基本概念 CUDA,全称是Compute Unified Device Architecture,意即统一计算架构,是NVIDIA推出的一种整合技术,开发者可以利用NVIDIA的GeForce 8 ...