LINQ介绍

參考:https://msdn.microsoft.com/en-us/library/bb397906.aspx

LINQ查询主要运行操作包含:1)获取数据源;2)创建查询;3)运行查询。须要注意的是仅仅有在使用查询结果的时候才会去运行查询,或者在创建查询之后再加上tolist或者toarray之类的功能则能够马上运行。

        // The Three Parts of a LINQ Query:
// 1. Data source.
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; // 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num; // 3. Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}

数据源能够来自于Array、List等或者直接从文件里读取的结果。

查询语句操作

參考:https://msdn.microsoft.com/en-us/library/bb397927.aspx

Filter: where cust.City==”London” && cust.Name == “Devon”

Order: orderby cust.Name ascending

Group: group cust by cust.City into custGroup where custGroup.Count() > 2

Join: join dist in distributors on cust.City equals dist.City

其它功能

我们在使用LINQ操作的时候,往往另一些额外的需求,比方去重啊。分组啊等等。

            // The Three Parts of a LINQ Query:
// 1. Data source.
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5, 6, 4 }; // 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num; // 3. Query execution.
foreach (int num in numQuery.Distinct())
{
Console.WriteLine("{0,1} ", num);
}
foreach (var num in numQuery.GroupBy(key => key))
{
Console.WriteLine("{0}:{1} ", num.Key, num.Count());
}
foreach (int num in numQuery.GroupBy(key => key).Select(key => key.Key))
{
Console.WriteLine("{0,1} ", num);
}

并行处理

LINQ比較强大的是还提供了可并行处理的查询。这使得我们能够借助它来完毕一些查询或者处理的并行操作。

        static void Main(string[] args)
{
// The Three Parts of a LINQ Query:
// 1. Data source.
int[] numbers = new int[100];
for (var i = 0; i < 100; i++)
numbers[i] = i; // 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num; // 3. Query execution.
Split(numQuery.ToList(), 10)
.AsParallel()
.WithDegreeOfParallelism(3)
.Select(process)
.ToList();
Console.ReadKey();
} static Tuple<List<int>, int> process(Tuple<List<int>, int> input)
{
foreach (var num in input.Item1)
Console.WriteLine("{0}-{1}", num, input.Item2);
return input;
} static IEnumerable<Tuple<List<int>, int>> Split(List<int> nums, int Count)
{
int index = 0;
List<int> num = new List<int>();
foreach(var nm in nums)
{
num.Add(nm);
if (num.Count >= Count)
{
yield return new Tuple<List<int>, int>(num, index++);
num = new List<int>();
}
}
if(num.Count > 0)
{
yield return new Tuple<List<int>, int>(num, index++);
}
}

具体介绍能够參考:https://msdn.microsoft.com/en-us/library/dd997425(v=vs.110).aspx

LINQ使用与并行的更多相关文章

  1. [LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL并行使用

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  2. 并行Linq

    有时候我们对大批量数据进行处理,此时并行linq就起作用了. 并行查询 对于以下查询可以耗时会非常大,如下: ; var r = new Random(); , arraySize).Select(x ...

  3. .NET 实现并行的几种方式(三)

    本随笔续接:.NET 实现并行的几种方式(二) 在前两篇随笔中,先后介绍了 Thread .ThreadPool .IAsyncResult (即 APM系列) .Task .TPL (Task Pa ...

  4. .NET并行编程实践(一:.NET并行计算基本介绍、并行循环使用模式)

    阅读目录: 1.开篇介绍 2.NET并行计算基本介绍 3.并行循环使用模式 3.1并行For循环 3.2并行ForEach循环 3.3并行LINQ(PLINQ) 1]开篇介绍 最近这几天在捣鼓并行计算 ...

  5. c# Linq查询

    c#提供的ling查询极大的遍历了集合的查询过程,且使用简单方便,非常的有用. 下面将分别用简单的例子说明:ling基本查询.延迟查询属性.类型筛选.复合from字句.多级排序.分组查询.联合查询.合 ...

  6. 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq

    5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq 5天玩转C#并行和多线程编 ...

  7. .net LINQ and PLINQ

    本文  学习自  微软官网文档   2016/12 LINQ 背景   以前写与DB 相关的代码, 程序员须要懂开发语言(C#, VB)和查询语言跟数据库交互. LINQ 的出现使应用程序形成基于集合 ...

  8. 并行编程之PLINQ

    并行编程之PLINQ 并行 LINQ (PLINQ) 是 LINQ 模式的并行实现.PLINQ 的主要用途是通过在多核计算机上以并行方式执行查询委托来加快 LINQ to Objects 查询的执行速 ...

  9. .NET并行计算基本介绍、并行循环使用模式

    .NET并行计算基本介绍.并行循环使用模式) 阅读目录: 1.开篇介绍 2.NET并行计算基本介绍 3.并行循环使用模式 3.1并行For循环 3.2并行ForEach循环 3.3并行LINQ(PLI ...

随机推荐

  1. ubuntu常用终端命令

    # ctrl + l - 清屏 . cLear# ctrl + c - 终止命令. # ctrl + d - 退出 shell,好像也可以表示EOF. # ctrl + z - 将当前进程置于后台,f ...

  2. J.U.C并发框架源码阅读(十一)DelayQueue

    基于版本jdk1.7.0_80 java.util.concurrent.DelayQueue 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is su ...

  3. Xamarin XAML语言教程构建进度条ProgressBar

    Xamarin XAML语言教程构建进度条ProgressBar Xamarin XAML语言教程构建进度条ProgressBar,ProgressBar被称为进度条,它类似于没有滑块的滑块控件.进度 ...

  4. POJ 2914 Minimum Cut (全局最小割)

    [题目链接] http://poj.org/problem?id=2914 [题目大意] 求出一个最小边割集,使得图不连通 [题解] 利用stoerwagner算法直接求出全局最小割,即答案. [代码 ...

  5. Unity3d之MonoBehavior的各个函数的执行顺序,回调,顺序,次数等

    Update 当MonoBehaviour启用时,其Update在每一帧被调用.仅调用一次(每帧) LateUpdate 当Behaviour启用时,  每帧调用一次: FixedUpdate 当Mo ...

  6. SQL表操作习题4 14~25题 缺20题

  7. 64位系统下powerdesigner15连接oracle odbc

    操作系统:win2008 64 Oracle版本:64位11g PowerDesigner版本:15.1 问题描述:因为PowerDesigner是32的程序,连接数据库会默认开启32位的ODBC,因 ...

  8. T-SQL语言基础(转载)

    本文转自http://www.cnblogs.com/Jolinson/p/3552786.html 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基 ...

  9. tq2440实验手册qt编译问题

    转载:http://blog.sina.com.cn/s/blog_6182b82201015ym1.html 编译qtopia最好使用的是低版本的gcc和g++. 举个简单的例子在qtopia的源代 ...

  10. DoTween 部分中文文档

    前言 DOTween现在还处于 alpha,所以还有一些缺失的功能(如路径插件,附加回调和其它的tween选项),这个文档在不久的将来可能会改变. 一.术语 Tweener 一个tween控制valu ...