南阳做网站电话,百度推广收费多少,家里电脑可以做网站服务器吗,如何免费建一个wordpress“标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法。大多数这些方法都在序列上运行#xff0c;其中的序列是一个对象#xff0c;其类型实现了IEnumerableT 接口或 IQueryableT 接口。标准查询运算符提供了包括筛选、投影、聚合、排序等功能在内的查询… “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法。大多数这些方法都在序列上运行其中的序列是一个对象其类型实现了IEnumerableT 接口或 IQueryableT 接口。标准查询运算符提供了包括筛选、投影、聚合、排序等功能在内的查询功能。 各个标准查询运算符在执行时间上有所不同具体情况取决于它们是返回单一值还是值序列。返回单一值的方法例如 Average 和 Sum会立即执行。返回序列的方法会延迟查询执行并返回一个可枚举的对象。 对于在内存中集合上运行的方法即扩展 IEnumerableT 的方法返回的可枚举对象将捕获传递到方法的参数。在枚举该对象时将使用查询运算符的逻辑并返回查询结果。 与之相反扩展 IQueryableT 的方法不会实现任何查询行为但会生成一个表示要执行的查询的表达式树。查询处理由源 IQueryableT 对象处理。 一、按标准执行方式分类 标准查询运算符方法的 LINQ to Objects 实现采用两种主要方式之一来执行立即执行和延迟执行。采用延迟执行的查询运算符可以进一步分为两类流式和非流式。 1.执行方式 1立即 立即执行意味着在代码中声明查询的位置读取数据源并执行运算。 返回单个不可枚举的结果的所有标准查询运算符都立即执行。 2延迟 延迟执行意味着不在代码中声明查询的位置执行运算。 仅当对查询变量进行枚举操作时才执行运算例如通过使用 foreach 语句。这意味着查询的执行结果取决于执行查询而非定义查询时的数据源内容。如果多次枚举查询变量则每次结果可能都不同。几乎所有返回类型为 IEnumerableT 或 IOrderedEnumerableTElement 的标准查询运算符都以延迟方式执行。 采用延迟执行方式的查询运算符可以另外分类为流式和非流式。 ①流式运算符不需要在生成元素前读取所有源数据。在执行时流式运算符一边读取每个源元素一边对该源元素执行运算并在可行时生成元素。流式运算符将持续读取源元素直到可以生成结果元素。这意味着可能要读取多个源元素才能生成一个结果元素。 ②非流式运算符必须读取所有源数据才能生成结果元素。诸如排序和分组等运算属于此类别。在执行时非流式查询运算符读取所有源数据将其放入数据结构中执行运算然后生成结果元素。 二、排列数据 排序操作按一个或多个特性对序列的元素进行排序。第一个排序条件对元素执行主要排序。通过指定第二个排序条件可以对各个主要排序组中的元素进行排序。 下图演示对一个字符序列执行按字母排序操作的结果。 标准查询运算符操作方法 - 排序 方法名说明C# 查询表达式语法OrderBy按升序对值进行排序。orderbyOrderByDescending按降序对值进行排序。orderby … descendingThenBy按升序执行次要排序。orderby …, …ThenByDescending按降序执行次要排序。orderby …, … descendingReverse颠倒集合中的元素的顺序。X 下面通过演示使用 orderby 进行升序排序按字符串长度 var words new[] { the, quick, brown, fox, jumps }; var query from word in words orderby word.Length select word; foreach (var word in query) { Console.WriteLine(word); } 下面通过演示使用 orderby descending 进行降序排序按字符串的第一个字母 var words new[] { the, quick, brown, fox, jumps }; var query from word in words orderby word.Substring(0,1) descending select word; foreach (var word in query) { Console.WriteLine(word); } 下面通过演示使用 orderby 进行主要和次要排序先升序按字符串长度主、再升序按字符串的第一个字母次 var words new[] { the, quick, brown, fox, jumps }; var query from word in words orderby word.Length, word.Substring(0, 1) select word; foreach (var word in query) { Console.WriteLine(word); } 下面通过演示使用 orderby descending 进行主要和次要排序先升序按字符串长度主、再降序按字符串的第一个字母次 var words new[] { the, quick, brown, fox, jumps }; var query from word in words orderby word.Length, word.Substring(0, 1) descending select word; foreach (var word in query) { Console.WriteLine(word); } 三、Set 操作 LINQ 中的 Set 操作是指根据相同或不同集合中是否存在等效元素来生成结果集的查询操作。 标准查询运算符操作方法 - Set 方法名说明C# 查询表达式语法Distinct从集合移除重复值。XExcept返回差集差集是指位于一个集合但不位于另一个集合的元素。XIntersect返回交集交集是指同时出现在两个集合中的元素。XUnion返回并集并集是指位于两个集合中任一集合的唯一的元素。X 图解 Set 操作 1Distinct 返回的序列包含输入序列的唯一元素。 2Except 返回的序列只包含位于第一个输入序列但不位于第二个输入序列的元素。 3Intersect 返回的序列包含两个输入序列共有的元素。 4Union 返回的序列包含两个输入序列的唯一的元素。 四、过滤数据 筛选指将结果集限制为只包含某些满足指定条件的元素的操作。它又称为选择。 下图演示了对字符序列进行筛选的结果。筛选操作的谓词指定字符必须为“A”。 标准查询运算符操作方法 - 筛选 方法名说明C# 查询表达式语法OfType根据值强制转换为指定类型的能力选择值。XWhere选择基于谓词函数的值。where 五、量词操作 限定符运算返回一个 Boolean 值该值指示序列中是否有一些元素满足条件或是否所有元素都满足条件。 下图描述了两个不同源序列上的两个不同限定符运算。第一个运算询问是否有一个或多个元素为字符“A”结果为 true。第二个运算询问是否所有元素都为字符“A”结果为 true。 标准查询运算符操作方法 - 量词 方法名说明C# 查询表达式语法All确定是否序列中的所有元素都满足条件。XAny确定序列中是否有元素满足条件。XContains确定序列是否包含指定的元素。X 六、投影操作 投影是指将对象转换为一种新形式的操作该形式通常只包含那些将随后使用的属性。通过使用投影您可以构建依据每个对象生成的新类型。您可以映射属性并对该属性执行数学函数。还可以在不更改原始对象的情况下映射该对象。 标准查询运算符操作方法 - 投影 方法名说明C# 查询表达式语法Select映射基于转换函数的值。selectSelectMany映射基于转换函数的值序列然后将它们展平为一个序列。使用多个 from 子句 Select下面的示例使用 select 子句来映射字符串列表中每个字符串的第一个字母 var words new[] { the, quick, brown, fox, jumps }; var query from word in words select word.Substring(0,1); foreach (var word in query) { Console.WriteLine(word); } SelectMany下面的示例使用多个 from 子句来映射字符串列表中每个字符串中的每个单词 var phrases new Liststring() { an apple a day, the quick brown fox }; var query from phrase in phrases from word in phrase.Split( ) select word; foreach (var word in query) { Console.WriteLine(word); } Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值。Select() 为每个源值生成一个结果值。因此总体结果是一个与源集合具有相同元素数目的集合。与之相反SelectMany() 将生成单一总体结果其中包含来自每个源值的串联子集合。作为参数传递到 SelectMany() 的转换函数必须为每个源值返回一个可枚举值序列。然后SelectMany() 将串联这些可枚举序列以创建一个大的序列。 下面两个插图演示了这两个方法的操作之间的概念性区别。在每种情况下假定选择器转换函数从每个源值中选择一个由花卉数据组成的数组。 下图描述 Select() 如何返回一个与源集合具有相同元素数目的集合。 下图描述 SelectMany() 如何将中间数组序列串联为一个最终结果值其中包含每个中间数组中的每个值。 示例 下面的示例比较 Select() 和 SelectMany() 的行为。代码将通过从源集合的每个花卉名称列表中提取前两项来创建一个“花束”。在此示例中转换函数 Select 使用的“单一值”本身就是一个值集合。这需要额外的 foreach 循环以便枚举每个子序列中的每个字符串。 static void Main(string[] args) { var bouquets new ListBouquet() { new Bouquet {Flowers new Liststring {sunflower, daisy, daffodil, larkspur}}, new Bouquet {Flowers new Liststring {tulip, rose, orchid}}, new Bouquet {Flowers new Liststring {gladiolis, lily, snapdragon, aster, protea}}, new Bouquet {Flowers new Liststring {larkspur, lilac, iris, dahlia}} }; IEnumerableListstring query1 bouquets.Select(bq bq.Flowers); IEnumerablestring query2 bouquets.SelectMany(bq bq.Flowers); Console.WriteLine(query1 - Select():); foreach (IEnumerablestring collection in query1) { foreach (var item in collection) { Console.WriteLine(item); } } Console.WriteLine(\nquery2 - SelectMany():); foreach (var item in query2) { Console.WriteLine(item); } Console.Read(); } class Bouquet { public Liststring Flowers { get; set; } } 七、划分数据 LINQ 中的分区指的是在不重新排列元素的情况下将输入序列划分为两部分然后返回其中一个部分的操作。 下图显示对一个字符序列执行三个不同的分区操作的结果。第一个操作返回序列中的前三个元素。第二个操作跳过前三个元素返回剩余的元素。第三个操作跳过序列中的前两个元素返回接下来的三个元素。 分区序列的标准查询运算符方法 运算符名称说明C# 查询表达式语法Skip跳过序列中的指定位置之前的元素。XSkipWhile基于谓词函数跳过元素直到某元素不再满足条件。XTake提取序列中的指定位置之前的元素。XTakeWhile基于谓词函数提取元素直到某元素不再满足条件。X 八、联接操作 将两个数据源“联接”就是将一个数据源中的对象与另一个数据源中共享某个通用特性的对象关联起来。 当查询所面向的数据源相互之间具有无法直接领会的关系时联接就成为一项重要的运算。在面向对象的编程中这可能意味着在未建模对象之间进行关联例如对单向关系进行反向推理。下面是单向关系的一个示例Customer 类有一个类型为 City 的属性但 City 类没有作为 Customer 对象集合的属性。如果你具有一个 City 对象列表并且要查找每个城市中的所有客户则可以使用联接运算完成此项查找。 LINQ 框架中提供的联接方法包括 Join 和 GroupJoin。这些方法执行同等联接即根据两个数据源的键是否相等来匹配这两个数据源的联接。与此相较Transact-SQL 支持除“等于”之外的联接运算符例如“小于”运算符。用关系数据库术语表达就是说 Join 实现了内部联接这种联接只返回那些在另一个数据集中具有匹配项的对象。GroupJoin 方法在关系数据库术语中没有直接的等效项但它实现了内部联接和左外部联接的超集。左外部联接是这样一种联接它返回第一个左数据源的每个元素即使该元素在另一个数据源中没有关联元素。 下图显示了一个概念性视图其中包含两个集合以及这两个集合中的包含在内部联接或左外部联接中的元素。 标准查询运算符操作方法 - 联接 方法名描述C# 查询表达式语法Join根据键选择器函数联接两个序列并提取值对。join … in … on … equals …GroupJoin根据键选择器函数联接两个序列并对每个元素的结果匹配项进行分组。join … in … on … equals … into … 九、分组数据 分组指将数据放入组中以便每个组中的元素共享公共特性的操作。 下图显示了对字符序列进行分组的结果。每个组的键是字符。 标准查询运算符方法 - 分组 方法名说明C# 查询表达式语法GroupBy对共享公共特性的元素进行分组。 每个组都由一个 IGroupingTKey, TElement 对象表示。 group … by - 或 -group … by … into …ToLookup根据键选择器函数将元素插入到 LookupTKey, TElement一个一对多字典中。X 使用 group by 子句根据列表中的整数是奇数还是偶数进行分组 var numbers new Listint() { 35, 44, 200, 84, 3987, 4, 199, 329, 446, 208 }; IEnumerableIGroupingbool, int query from number in numbers group number by number % 2 0; foreach (var group in query) { Console.WriteLine(${(group.Key ? 偶数 : 基数)}); foreach (var i in group) { Console.WriteLine(i); } } 十、生成操作 生成是指创建新的值序列。 标准查询运算符方法 - 生成 方法名说明C# 查询表达式语法DefaultIfEmpty将空集合替换为具有默认值的单一实例集合。XEmpty返回空集合。XRange生成包含数字序列的集合。XRepeat生成包含一个重复值的集合。X 十一、等值操作 如果两个序列的对应元素相等且这两个序列具有相同数量的元素则视这两个序列相等。 标准查询运算符方法 - 等值 方法名说明C# 查询表达式语法SequenceEqual通过成对地比较元素确定两个序列是否相等。X 十二、元素操作 元素操作从一个序列返回单个特定元素。 标准查询运算符操作方法 - 元素 方法名说明C# 查询表达式语法ElementAt返回集合中指定索引处的元素。XElementAtOrDefault返回集合中指定索引处的元素如果索引超出范围则返回默认值。XFirst返回集合中的第一个元素或满足条件的第一个元素。XFirstOrDefault返回集合中的第一个元素或满足条件的第一个元素。 如果没有这样的元素则返回默认值。 XLast返回集合中的最后一个元素或满足条件的最后一个元素。XLastOrDefault返回集合中的最后一个元素或满足条件的最后一个元素。 如果没有这样的元素则返回默认值。 XSingle返回集合中的唯一元素或满足条件的唯一元素。XSingleOrDefault返回集合中的唯一元素或满足条件的唯一元素。 如果没有这样的元素或集合不是正好包含一个元素则返回默认值。 X 十三、转换数据类型 转换方法更改输入对象的类型。 LINQ 查询中的转换运算可用于各种应用程序。下面是一些示例 1Enumerable.AsEnumerableTSource 方法可用于隐藏类型的标准查询运算符的自定义实现。 2Enumerable.OfTypeTResult 方法可用于启用非参数化集合以进行 LINQ 查询。 3Enumerable.ToArrayTSource、Enumerable.ToDictionaryTSource, TKey、Enumerable.ToListTSource 和Enumerable.ToLookupTSource, TKey 方法可用于强制立即执行查询而非推迟到枚举查询时。 标准查询运算符方法 - 转换数据类型 方法名说明C# 查询表达式语法AsEnumerable返回类型为 IEnumerableT 的输入。XAsQueryable将泛型IEnumerable 转换为泛型IQueryable。XCast将集合的元素强制转换为指定类型。使用显式类型化的范围变量。 例如from string str in wordsOfType根据值强制转换为指定类型的能力筛选值。XToArray将集合转换为数组。 此方法强制执行查询。XToDictionary根据键选择器函数将元素放入 DictionaryTKey, TValue 中。 此方法强制执行查询。XToList将集合转换为 ListT。 此方法强制执行查询。XToLookup根据键选择器函数将元素放入 LookupTKey, TElement一对多字典中。 此方法强制执行查询。X 示例 static void Main(string[] args) { var plants new Plant[] { new CarnivorousPlant {Name Venus Fly Trap, TrapType Snap Trap}, new CarnivorousPlant {Name Pitcher Plant, TrapType Pitfall Trap}, new CarnivorousPlant {Name Sundew, TrapType Flypaper Trap}, new CarnivorousPlant {Name Waterwheel Plant, TrapType Snap Trap} }; var query from CarnivorousPlant plant in plants where plant.TrapType Snap Trap select plant; foreach (var carnivorousPlant in query) { Console.WriteLine(carnivorousPlant.Name); } Console.Read(); } class Plant { public string Name { get; set; } } class CarnivorousPlant : Plant { public string TrapType { get; set; } } 使用显式类型化的范围变量将类型强制转换为子类型然后才访问仅在此子类型中提供的成员。 仅在此子类型中提供的成员。 十四、串联操作 串联是指将一个序列追加到另一个序列的运算。 下图演示对两个字符序列执行的串联运算。 标准查询运算符操作方法 - 串联 方法名说明C# 查询表达式语法Concat串联两个序列以组成一个序列。X 十五、聚合操作 聚合运算从值集合计算单个值。从一个月的日温度值计算日平均温度就是聚合运算的一个示例。 下图显示了对一个数字序列执行两个不同聚合运算的结果。第一个运算对这些数字执行求和。第二个运算返回该序列中的最大值。 标准查询运算符操作方法 - 聚合 方法名说明C# 查询表达式语法Aggregate对集合值执行自定义聚合运算。XAverage计算值集合的平均值。XCount对集合中的元素进行计数还可以仅对满足某一谓词函数的元素进行计数。XLongCount对大型集合中的元素进行计数还可以仅对满足某一谓词函数的元素进行计数。XMax确定集合中的最大值。XMin确定集合中的最小值。XSum计算集合中值的总和。X 原文地址http://www.cnblogs.com/liqingwen/p/5801249.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注