博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINQ使用与并行
阅读量:6340 次
发布时间:2019-06-22

本文共 3465 字,大约阅读时间需要 11 分钟。

LINQ介绍

參考:
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
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等或者直接从文件里读取的结果。

查询语句操作

參考:
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
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
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
, int> process(Tuple
, int> input) { foreach (var num in input.Item1) Console.WriteLine("{0}-{1}", num, input.Item2); return input; } static IEnumerable
, int>> Split(List
nums, int Count) { int index = 0; List
num = new List
(); foreach(var nm in nums) { num.Add(nm); if (num.Count >= Count) { yield return new Tuple
, int>(num, index++); num = new List
(); } } if(num.Count > 0) { yield return new Tuple
, int>(num, index++); } }

具体介绍能够參考:

转载地址:http://wqhoa.baihongyu.com/

你可能感兴趣的文章
第一次作业:安装虚拟机(kali)以及Windows和Linux环境下命令实验
查看>>
HDU-敌兵布阵
查看>>
7、Appium常用API
查看>>
画用例图
查看>>
实时推荐系统架构
查看>>
列出当前目录的以及子目录的空间大小 du -sh *
查看>>
Effective_STL 学习笔记(三十四) 注意哪个算法需要有序区间
查看>>
laravel基础课程---10、数据库基本操作(如何使用数据库)
查看>>
poi读取word2003(.doc文档)中的表格
查看>>
Php learn note
查看>>
一次傻乎乎的错误QAQ
查看>>
vue初步构建项目
查看>>
python之编写购物车(第二天)
查看>>
sql server中Set与select的区别
查看>>
POJ 1655
查看>>
Docker 学习笔记_安装和使用MongoDB
查看>>
ubuntu下Mysql
查看>>
SQL-30 使用子查询的方式找出属于Action分类的所有电影对应的title,description
查看>>
集训第六周 矩阵快速幂 K题
查看>>
VM虚拟机mac x lion安装xcode
查看>>