一.查询非泛型集合

1.问题起源

LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典、数组、List<T>等,但是对于继承了IEnumerable的非泛型集合如何处理,例如ArrayList。

2.解决办法

上源码:

            ArrayList mArrayList = new ArrayList() {"","1dsadsad","12w1212","1212e12esadq" };
var query = from m in mArrayList.Cast<string>()
where m.Length >
select m;
foreach (var item in query)
{
Console.WriteLine(item.ToString());
}
Console.Read();

Cast操作符是解决此问题的关键。

public static IEnumerable<T> Cast<T>( this IEnumerable source);

解析:

1.从上述代码可以看出,Cast是一个扩展的方法,返回值是IEumerable<T>,Cast的原对象是IEnumerable,针对实现了IEnumerable接口的对象进行扩展。

2.Cast操作符将源序列中的每个元素转型为某一指定的类型:T

3.Cast操作符通过一次遍历源序列中的元素来返回一个可被枚举的对象,当其他代码开始遍历Cast操作的返回结果时,Cast操作符同时开始遍历源序列,转换为T类型,依次返回。

3.OfType

除了Cast操作符之外,我们还可以使用OfType操作符,差别在于OfType操作符只会返回源序列中属于某种特定类型的元素,例如:

ArrayList中同时包含有Book和Student两种不同的类型的对象时,调用ArrayList.OfType<Book>() 将只会返回Book对象。

二.多个分组条件

1.概述

为了实现这个目标,我在group子句中需要指定一个匿名类型

var query=from book in Samp.Books
group book by new
{
book.Publish,
book.Title
}

解析:

上述查询的是一个集合,其中的每一个元素都是一个分组,每个分组都会包含一个Key(即该匿名类型的一个实例),以及满足该Key的图书集合。

2.再次巩固

上源码:

var query2 = from book in SampleData.booksArray
group book by new { book.Publisher, book.Title } into BookGroup
select new
{
publishName=BookGroup.Key.Publisher.Name,
title=BookGroup.Key.Title
};
foreach (var item in query2)
{
Console.WriteLine(item.publishName+"; "+item.title);
}

这里引入into的目的在于接下来select 和其他子句进行使用,into关键词后的BookGroup变量包含了该组的Key,以及该组中的元素。

Key表示分组的依据,每组中包含的元素则可以通过变量BookGroup变量(该变量实现了IEnumerable<T>接口)得到

源代码: LINQ查询非泛型集合和分组查询测试源码

本文为学习《LINQ实战》总结。

LINQ学习系列-----3.1 查询非泛型集合和多个分组的更多相关文章

  1. LINQ学习系列-----3.1 查询非泛型集合

    一.问题起源 LINQ to object在设计时,是配合IEnumerable<T>接口的泛型集合类型使用的,例如字典.数组.List<T>等,但是对于继承了IEnumera ...

  2. Linq查询非泛型集合要指定Student类型(比如List)

    #region Linq to 集合查询非泛型集合要指定Student类型            //ArrayList list = new ArrayList();            //li ...

  3. LINQ学习系列-----2.3 迭代器带来的延迟查询

    此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行                      废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 fro ...

  4. Linq操作非泛型集合

    我们都知道,Linq能查询泛型集合,确切的说是:LINQ能实现查询泛型对象或者实现了IEnumerable.但是,很遗憾的是诸如ArrayList这样的非泛型集合并没有实现IEnumerable.那咋 ...

  5. LINQ学习系列-----1.3 扩展方法

    这篇内容继续接着昨天的Lambda表达式的源码继续下去.昨天讲了Lambda表达式,此篇讲扩展方法,这两点都是Linq带来的新特性.    一.扩展方法介绍   废话不多说,先上源码截图: 上图中Ge ...

  6. C#非泛型集合和泛型集合的超级详解

    C# 泛型集合之非泛型集合类与泛型集合类的对应: ArrayList对应List HashTable对应Dictionary Queue对应Queue Stack对应Stack SortedList对 ...

  7. 笔记:Struts2 Action 非泛型集合元素类型转换

    局部类型转换文件 局部类型转换文件的文件名应为 ActionName-conversion.properties,其中 ActionName 是需要替换为 Action 的类名称,后面的 conver ...

  8. C#-非泛型集合的方法

    非泛型集合的类和接口位于System.Collections命名空间 如:列表.队列.位数组.哈希表和字典的集合     ArrayList 动态数组 可被单独索引的对象的有序集合可以使用索引在指定的 ...

  9. 编写高质量代码改善C#程序的157个建议——建议20:使用泛型集合代替非泛型集合

    建议20:使用泛型集合代替非泛型集合 在建议1中我们知道,如果要让代码高效运行,应该尽量避免装箱和拆箱,以及尽量减少转型.很遗憾,在微软提供给我们的第一代集合类型中没有做到这一点,下面我们看Array ...

随机推荐

  1. JavaScript——问卷星自动填写

    一.前言: 我们学校要刷学术章,有些学术章又是指定在某个时间点填写问卷星的问卷报名的.但是由于我手速慢,导致总会有些时候报不上名,于是想着搞个代码实现自动填写问卷星的报名表.一顿操作后,在github ...

  2. php 获取不到post的值

    一般在ajax提交的时候出现这种情况 当我们在ajax参数设置   contentType: 'application/json; charset=utf-8', 用file_get_contents ...

  3. 清空资源管理器访问过FTP的账号、密码

    修改注册表,删除HKEY_CURRENT_USER\SOFTWARE\Microsoft\FTP\Accounts下相对应的项即可,即为xxx.xxx.xxx.xxx项. 如下图所示:

  4. Android开发 navigation入门详解

    前言 Google 在2018年推出了 Android Jetpack,在Jetpack里有一种管理fragment的新架构模式,那就是navigation. 字面意思是导航,但是除了做APP引导页面 ...

  5. node---处理post请求

    //nodejs 处理post请求 // 异步 const http =require('http') const server=http.createServer((req,res)=>{ i ...

  6. C++调用python(C++)

    C++源代码:python部分就是正常的python代码 #include <string.h> #include <math.h> #include "iostre ...

  7. agc38C LCMs

    https://atcoder.jp/contests/agc038/tasks/agc038_c 题意:给\(a_i\),求\(\sum_{i=1}^n\sum_{j=i+1}^nlcm(a_i,a ...

  8. BZOJ 4557 (JLOI 2016) 侦查守卫

    4557: [JLoi2016]侦察守卫 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 493 Solved: 342 [Submit][Status ...

  9. 缓冲(cache)和缓存(buffer)

    缓存: 指把常用数据存储到可以快速获取的区域,以备重复利用 一般叫做cache. 缓存能提高效率 缓冲: 是指在数据流转过程中,不同层次速度不一致时,利用缓冲区来缓解上下层之间速率问题(性能差异) 一 ...

  10. (转) Mac下面的SecureCRT(附破解方案) 更新到最新的7.3.7

    Mac下面的SecureCRT(附破解方案) 更新到最新的7.3.7 转自 http://blog.csdn.net/skykingf/article/details/17450561 http:// ...