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. Python的程序结构[1] -> 方法/Method[3] -> 魔术方法 __getattr__ 与代理模式

    __getattr__ 方法 __getattr__ 方法当对象调用内部属性(包括方法等)且未找到对应属性的时候会调用的特殊方法.利用这一特性,可是对函数实现一个代理模式. __getattr__方法 ...

  2. spoj - Grass Planting(树链剖分模板题)

    Grass Planting 题意 给出一棵树,树有边权.每次给出节点 (u, v) ,有两种操作:1. 把 u 到 v 路径上所有边的权值加 1.2. 查询 u 到 v 的权值之和. 分析 如果这些 ...

  3. [HDU4336]Card Collector(min-max容斥,最值反演)

    Card Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  4. iOS开发 Swift开发数独游戏(二)数独题目的生成

    一.Plist文件结构设计 由于要预先生成数独题目的文件,我自然而然想到用plist存取. 我用Xcode建了几个plist文件来熟悉这种文件使用的结构后设计了如下结构: 为区分难度(后来了解到挖空数 ...

  5. 在C#中用RX库和await来实现直观的状态机

    在程序的设计过程中,我们经常会遇到一些需要使用状态机的场景,相信状态机的编写和维护是令每一个程序员都非常头大的事情.到了C# 5.0后,由于引进了await语法糖,我们可以通过await和Reacti ...

  6. 纯CSS实现网站常用的五角星评分和分数展示交互效果

    最近做的一个项目涉及到评分和展示分数的模块,UI设计师也给了几个切好的图片,实现五角星评分方式很多,本质爱折腾的精神和对性能追求以及便于维护的考虑,搜集和尝试了很多方式,最终采用了纯css驱动的实现方 ...

  7. 【Java】java注解@Transient的作用, 配合JPA中时间段的查询

    java注解@Transient的作用 @Transient标注的属性,不会被ORM框架映射到数据库中. 用于数据库表字段和java实体属性不一致的时候,标注在属性上使用. 例如时间段的查询 查询 R ...

  8. WCF IIS上部署服务

    一.选择应用程序池:.Net Framework 4.0集成模式 二.IIS Access is denied:程序所在文件夹给予Everyone权限 三.HTTP 错误 500.21 - Inter ...

  9. functor

    I thought it would be easy and convenient to define a small functor and perform a customized sort on ...

  10. 【ecshop---新增包邮卡功能】

    一:需求分析 项目组要求新增类似虚拟卡的包邮卡,用户获得包邮卡的方式包括后台发送和前台自助充值.包邮卡有使用期限.订单使用包邮卡免除邮费.可以和其他优惠活动同时进行! 二:开发功能点 后台:新增包邮卡 ...