LINQ标准查询运算符的执行方式-即时
即时,声明查询的位置立即执行。查询返回如果是不可以枚举的的结果,都会立即执行。
执行方式为“”即时”的查询运算符有下面这些。
- Aggregate 应用累计器函数和结果选择器,返回传入泛型类型TSource
//找出字符串最长值
string[] fruits = { "apple", "mango", "orange", "passionfruit", "grape" };
string longestName =
fruits.Aggregate("banana",
(longest, next) =>
next.Length > longest.Length ? next : longest,
fruit => fruit.ToUpper());
Console.WriteLine(
"The fruit with the longest name is {0}.",
longestName);
- All 判断所有函数是否满足条件,返回bool
string[] names = { "ab","abc","abcd"};
bool allStartWithab = names.All(p => p.StartsWith("ab"));
bool allStartWithabc = names.All(p => p.StartsWith("abc"));
Console.WriteLine(
"{0} pet names start with 'ab'. {1} pet names start with 'abc'",
allStartWithab ? "All" : "Not all", allStartWithabc ? "all":"not all");
- Any 判断序列是否包含元素,返回bool
List<int> numbers = new List<int> { , };
bool hasElements = numbers.Any();
bool hasElementsEquals2 = numbers.Any(num=>num==);
Console.WriteLine($"{hasElements} {hasElementsEquals2}");
- Average 求平均值
List<int> grades = new List<int> { , , , , };
var average = grades.Average();
Console.WriteLine("The average grade is {0}.", average);
- Contains 是否包含特定的元素
string[] fruits = { "apple", "banana", "mango", "orange", "passionfruit", "grape" };
string fruit = "mango";
bool hasMango = fruits.Contains(fruit);
- Count 计算序列的数目,返回类型Int
string[] fruits = { "apple", "banana", "mango", "orange", "passionfruit", "grape" };
fruits.Count();
- ElementAt 返回源序列指定位置的元素
string[] names =
{ "Hartono, Tommy", "Adams, Terry", "Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
Random random = new Random(DateTime.Now.Millisecond);
var name = names.ElementAt();
Console.WriteLine("The name chosen at random is '{0}'.", name);
ElementAtDefault
First
Empty
FirstDefault 返回序列的第一个元素 ,如果为空则返回类型的默认值
string[] names = { "Hartono, Tommy", "Adams, Terry",
"Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
string firstLongName = names.FirstOrDefault(name => name.Length > );
Console.WriteLine("The first long name is '{0}'.", firstLongName);
string firstVeryLongName = names.FirstOrDefault(name => name.Length > );
Console.WriteLine(
"There is {0} name longer than 30 characters.",
string.IsNullOrEmpty(firstVeryLongName) ? "not a" : "a");
//如果为空,希望设另一个值,可以使用DefaultIfEmpty 后面必须使用First方法.
List<int> months = new List<int> { };
int firstMonth2 = months.DefaultIfEmpty().First();
Console.WriteLine("The value of the firstMonth2 variable is {0}", firstMonth2);
- Last、LastOrDefault
int[] numbers = { , , , , , , , ,
, , , , , };
int last = numbers.Last(num => num > );
int last1 = numbers.Last();
Console.WriteLine(last);
Console.WriteLine(last1);
int[] numbers1 = { };
Console.WriteLine(numbers1.LastOrDefault());
Console.WriteLine(numbers1.DefaultIfEmpty().Last());
- LongCount
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
Pet[] pets = { new Pet { Name="Barley", Age= },
new Pet { Name="Boots", Age= },
new Pet { Name="Whiskers", Age= } }; const int Age = ; int count0 = pets.Count(pet => pet.Name.StartsWith("B"));
long count = pets.LongCount(pet => pet.Age > Age);
long count1 = pets.LongCount();
long count2 = pets.LongLength; Console.WriteLine("There are {0} animals over age {1}.{2},{3}", count, Age,count1,count2);
}
}
class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
}
- Max
List<long> longs = new List<long> { 4294967296L, 466855135L, 81125L };
long max = longs.Max();
Console.WriteLine("The largest number is {0}.", max);
Pet[] pets = { new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 },
new Pet { Name="Whiskers", Age=1 } };
int min = pets.Min(pet => pet.Age+pet.Name.Length);
Console.WriteLine("The youngest animal is age {0}.", min)
- SequenceEquals 比较两个序列是否相等,使用默认比较器,也可以传一个新的比较器。返回bool值
Pet pet1 = new Pet { Name = "Turbo", Age = };
Pet pet2 = new Pet { Name = "Peanut", Age = };
List<Pet> pets1 = new List<Pet> { pet1, pet2 };
List<Pet> pets2 = new List<Pet> { pet1, pet2 };
bool equal = pets1.SequenceEqual(pets2);
Console.WriteLine(
"The lists {0} equal.",
equal ? "are" : "are not");
List<Pet> pets3 = new List<Pet> { pet2, pet1 };
equal = pets1.SequenceEqual(pets3);
Console.WriteLine(
"The lists {0} equal.",
equal ? "are" : "are not");
- Single 返回序列中特定的元素,元素不唯一和找不到元素都抛异常。
string[] fruits = { "apple", "banana", "mango",
"orange", "passionfruit", "grape" };
string fruit1 = fruits.Single(fruit => fruit.Length >);
Console.WriteLine(fruit1);
//抛异常
//string fruit2 = fruits.Single(fruit => fruit.Length >0);
//抛异常
//string fruit3 = fruits.Single();
- SingleDefault 返回序列中特定的元素,元素不唯一则抛异常
int[] pageNumbers = { };
int pageNumber1 = pageNumbers.SingleOrDefault();
Console.WriteLine("The value of the pageNumber1 variable is {0}", pageNumber1);
int pageNumber2 = pageNumbers.DefaultIfEmpty().Single();
Console.WriteLine("The value of the pageNumber2 variable is {0}", pageNumber2);
- Sum
float?[] points = { null, , 92.83F, null, 100.0F, 37.46F, 81.1F };
float? sum = points.Sum();
Console.WriteLine("Total points earned: {0}", sum);
- ToArray
List<Package> packages =
new List<Package>
{ new Package { Company = "Coho Vineyard", Weight = 25.2 },
new Package { Company = "Lucerne Publishing", Weight = 18.7 },
new Package { Company = "Wingtip Toys", Weight = 6.0 },
new Package { Company = "Adventure Works", Weight = 33.8 } }; string[] companies = packages.Select(pkg => pkg.Company).ToArray();
- ToDictionary
List<Package> packages = new List<Package>
new Package { Company = "Coho Vineyard", Weight = 25.2, TrackingNumber = 89453312L },
new Package { Company = "Lucerne Publishing", Weight = 18.7, TrackingNumber = 89112755L },
new Package { Company = "Wingtip Toys", Weight = 6.0, TrackingNumber = 299456122L },
new Package { Company = "Adventure Works", Weight = 33.8, TrackingNumber = 4665518773L } }; Dictionary<long, Package> dictionary =
packages.ToDictionary(p=>p.TrackingNumber); foreach (var kvp in dictionary)
{
Console.WriteLine(
"Key {0}: {1}, {2} pounds",
kvp.Key,
kvp.Value.Company,
kvp.Value.Weight);
}
- ToList
string[] fruits = { "apple", "passionfruit", "banana", "mango",
"orange", "blueberry", "grape", "strawberry" };
List<int> lengths = fruits.Select(fruit => fruit.Length).ToList();
foreach (int length in lengths)
{
Console.WriteLine(length);
}
LINQ标准查询运算符的执行方式-即时的更多相关文章
- LINQ标准查询运算符的执行方式-延时之流式处理
linq的延时执行是指枚举时才去一个个生成结果元素. 流式处理是linq延时执行的一种,在生成元素前不需要获取所有源元素,只要获取到的源元素足够计算时,便生成结果元素. 流式处理的标准查询运算符返回值 ...
- C#3.0新增功能09 LINQ 标准查询运算符 03 按执行方式的分类
连载目录 [已更新最新开发文章,点击查看详细] 标准查询运算符方法的 LINQ to Objects 实现主要通过两种方法之一执行:立即执行和延迟执行.使用延迟执行的查询运算符可以进一步分为两种 ...
- .NET LINQ标准查询运算符
标准查询运算符概述 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法. 大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了 IEnumerable<T> ...
- C#3.0新增功能09 LINQ 标准查询运算符 04 运算
连载目录 [已更新最新开发文章,点击查看详细] 本篇主要介绍标准查询运算符的常用运算功能. 01 对数据排序 排序操作基于一个或多个属性对序列的元素进行排序. 第一个排序条件对元素执行主要排序. ...
- C#3.0新增功能09 LINQ 标准查询运算符 01 概述
连载目录 [已更新最新开发文章,点击查看详细] 标准查询运算符 是组成 LINQ 模式的方法. 这些方法中的大多数都作用于序列:其中序列指其类型实现 IEnumerable<T> 接 ...
- C#3.0新增功能09 LINQ 标准查询运算符 02 查询表达式语法
连载目录 [已更新最新开发文章,点击查看详细] 某些使用更频繁的标准查询运算符具有专用的 C# 语言关键字语法,使用这些语法可以在查询表达式中调用这些运算符. 查询表达式是比基于方法的等效项更具 ...
- linq标准查询运算符
Order By操作 适用场景:对查询出的语句进行排序,比如按时间排序等等. 说明:按指定表达式对集合排序:延迟,:按指定表达式对集合排序:延迟,默认是升序,加上descending表示降序,对应的扩 ...
- .NET中那些所谓的新语法之四:标准查询运算符与LINQ
开篇:在上一篇中,我们了解了预定义委托与Lambda表达式等所谓的新语法,这一篇我们继续征程,看看标准查询运算符和LINQ.标准查询运算符是定义在System.Linq.Enumerable类中的50 ...
- “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法
“标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> 接口或 IQueryable& ...
随机推荐
- 美食家App开发日记5
今天将ListView控件用更强大的Recyclerview控件取代,最后调试了程序. 感觉Android编程难度实在是远远高于javaweb,初次接触,感觉有很多东西想实现,想得很容易,但是实现起来 ...
- XSS Cheat Sheet
Basic and advanced exploits for XSS proofs and attacks. Work in progress, bookmark it. Technique Vec ...
- 内部类、final与垃圾回收,面试时你一说,面试官就知道
内部类并不常用,而且使用起来有一定的定式,比如在下面的InnterDemoByTrhead.java里,我们通过内部类的形式创建线程. 1 public class InnerDemoByThread ...
- Windows 下部署Subversion
前言 此文章介绍用户在windows环境下部署svn服务,部署svn服务的方式并不是唯一的,我这里仅仅列出了其中很普通的一种,若使用者有其他喜欢的方式也可自行选择 名词介绍 VisualSVN Ser ...
- Shell之用户与权限
用户与组 早期Linux系统设计为了能够实现多用户.多进程高效的利用服务器资源,在此种情况下,为了能够保证用户与用户之间的文件不被随意的访问及修改.删除等操作,用户.组的管理能在某种程序上实现管理用户 ...
- Spring注解开发系列Ⅲ --- 生命周期
Bean的生命周期 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解. 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: S ...
- HTTPS 详解一:附带最精美详尽的 HTTPS 原理图
HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 前言 作为一个有追求的程序员,了解行业发展趋势和扩充自己的计算机知识储备都是很有 ...
- BFS(广度优先搜索华容道游戏)--11--BFS--蓝桥杯卡片换位
题目描述 你玩过华容道的游戏吗?这是个类似的,但更简单的游戏.看下面 3 x 2 的格子 +---+---+---+ | A | * | * | +---+---+---+ | B | | * | + ...
- 安卓开发实战-记账本APP(三)
本次实现的是有关登录,注册和整体页面的改观,实现下方选项导致页面的切换效果. 利用到的技术有Sqlite数据库的增删改查,与fragment实现.由于暂时没有找到合适的图标,先借用微信的图标暂代一下. ...
- svn: Can't connect to host '': 由于目标机器积极 原因及解决办法
在dos环境下输入命令“svnserve -d --listen-port 3690 -r d:\svn” 这里“d:\svn” 是你在svn中创建的版本库路径,然后执行命令,记住窗口不能关闭,关闭之 ...