声明:本文为www.cnc6.cn原创,转载时请注明出处,谢谢!

本文作者文采欠佳,文字表达等方面不是很好,但实际的代码例子是非常实用的,请作参考。

一、先准备要使用的类:

1、Person类:

    class Person
{
public string Name { set; get; }
public int Age { set; get; }
public string Gender { set; get; }
public override string ToString() => Name;
}

2、准备要使用的List,用于查找(ToLookUp,类似分组):

        List<Person> personList = new List<Person>
{
new Person
{
Name = "P1", Age = , Gender = "Male" },
new Person
{
Name = "P2", Age = , Gender = "Male",
},
new Person
{
Name = "P2", Age = ,Gender = "Female",
}
};

3、ToLookUp与GroupBy的功能基本一样,但ToLookUp没有GroupBy那样得延迟执行机制,它是立即执行的,且重载只有4个,而GroupBy却有8个之多。

二、第一种用法:

public static ILookup<TKey, TSource> ToLookup<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);

官方释义:根据指定的键选择器函数,从IEnumerable<TSource>创建一个 ILookup<TKey, TSource>。

其实,ToLookUp具有GroupBy一样的分组功能,我们要LookUp的集合为source,集合内每个元素的类型为TSource,这里第一个参数keySelector的类型为Func<TSource, TKey>,用于将TSource元素按照由此委托返回的类型TKey进行LookUp,结果为一个已分好组的集合(集合中的集合)。

编写客户端试验代码如下:

        var lookups = personList.ToLookup(p => p.Gender);
foreach(var lookup in lookups)
{
Console.Write($"{lookup.Key}:\t");
foreach(var person in lookup)
{
Console.Write($"{person.Name},{person.Age}\t");
}
Console.WriteLine();
}

以上代码指定的KeySelector是Person类的Gender属性,因此,以上会按照Gender(性别)进行LookUp,我们使用两个嵌套的foreach循环将分组的内容打印到控制台。

因为lookups返回的类型为ILookUp<TKey,TSource>(实际继承于IEnumerable<IGrouping<TKey,TSource>>),因此以上返回的类型为ILookUp<string,Person>。

ILookUp<string,Person>是已经LookUp后的集合,内部集合元素为Person,且ILookUp有一个Key属性,类型为string(指的是Gender属性类型),用于LookUp的标识。

输出结果如下:

三、第二、三、四种用法

由于ToLookUp与GroupBy相似,因此,第二、三、四种用法请参考请参考 [C#] LINQ之GroupBy 。

public static ILookup<TKey, TSource> ToLookup<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer);

官方释义:根据指定的键选择器函数和键比较器,从IEnumerable<TSource>创建一个ILookup<TKey, TElement>。

请参考 [C#] LINQ之GroupBy 中的第二种用法。

public static ILookup<TKey, TElement> ToLookup<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector);

官方释义:根据指定的键选择器和元素选择器函数,从IEnumerable<TSource>创建一个ILookup<TKey, TElement>。

请参考 [C#] LINQ之GroupBy 中的第三种用法。

public static ILookup<TKey, TElement> ToLookup<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer);

官方释义:根据指定的键选择器函数、比较器和元素选择器函数,从IEnumerable<TSource>创建一个ILookup<TKey, TElement>。

请参考 [C#] LINQ之GroupBy 中的第五种用法。

LINQ 之 LookUp的更多相关文章

  1. [C#] LINQ之LookUp

    声明:本文为www.cnc6.cn原创,转载时请注明出处,谢谢! 本文作者文采欠佳,文字表达等方面不是很好,但实际的代码例子是非常实用的,请作参考. 一.先准备要使用的类: 1.Person类: cl ...

  2. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  3. [C#] 进阶 - LINQ 标准查询操作概述

    LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...

  4. LINQ函数

    LINQ函数虽然和LINQ语句实现了同样的功能,但LINQ函数使用起来更加快捷.学过数据库的感觉LINQ语句都不难,但语句比较长. 会LINQ函数,才算会LINQ. 1.Where(),结果过滤 Li ...

  5. LINQ 函数的实战演练测试

    1.首先定义一个图书类.专门存放图书的属性信息. 代码如下:   //Book.cs using System; namespace LinqTest { public class Book { pu ...

  6. C#基础:LINQ 查询函数整理

    1.LINQ 函数   1.1.查询结果过滤 :where() Enumerable.Where() 是LINQ 中使用最多的函数,大多数都要针对集合对象进行过滤,因此Where()在LINQ 的操作 ...

  7. C#中的LINQ

    从自己的印象笔记里面整理出来,排版欠佳.见谅!   1.LINQ: 语言集成查询(Language Integrated Query) 实例: var q=      from c in catego ...

  8. LINQ系列:Linq to Object转换操作符

    转换是指将输入对象的类型转变为序列的动作. 1. AsEnumerable AsEnumerable操作符将查询的输入以IEnumberable(T)类型返回. 2. Cast Cast操作符将IEn ...

  9. .NET LINQ 转换数据类型

    转换数据类型      转换方法更改输入对象的类型.      LINQ 查询中的转换运算可用于各种应用程序.下面是一些示例: Enumerable.AsEnumerable<TSource&g ...

随机推荐

  1. 码云git常用命令

    Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加 ...

  2. 尉蓝色的P2P金融众筹平台手机模板

    蓝色的p2p金融投资众筹网手机模板html整站下载.实用的众筹app手机模板下载.主要页面有:众筹项目.发布.个人中心.登录.注册.优惠券.回报.项目详情.我要支持.帮助中心等总共37个手机页面. 模 ...

  3. TCP三次握手四次分手—简单详解

    关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 疑问一,上图传递过程中出 ...

  4. Linux 下Postgresql 命令:

    关闭:service postgresql stop 启动:service postgresql start 启动数据库:pg_ctl start -D /data/postgres 重启数据库: p ...

  5. Xcode里面如何添加和配置pch文件??

    开发工具/原料: 1.Mac 2.Xcode(我这里目前用的Xcode的最新版本Xcode 7.3) PCH文件的部分发展史: 定义:pch全称为“precompiled header”,也就是预编译 ...

  6. basename剔除目录

    给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被去掉 Examples: basename /usr/bin/sort Out ...

  7. 9.智能快递柜SDK(串口型锁板)

    1.智能快递柜(开篇) 2.智能快递柜(终端篇) 3.智能快递柜(通信篇-HTTP) 4.智能快递柜(通信篇-SOCKET) 5.智能快递柜(通信篇-Server程序) 6.智能快递柜(平台篇) 7. ...

  8. bayaim_mysql_忘记密码 [仅限 5.6以下]

    bayaim_mysql_忘记密码 [仅限 5.6以下] 原创 作者:bayaim 时间:2017-12-26 10:47:41 8 0删除编辑 忘记root密码------------------- ...

  9. MIPI CSI2学习(一):说一说MIPI CSI2

    1. MIPI CSI2简介 MIPI联盟是一个开放的会员制组织.2003年7月,由美国德州仪器(TI).意法半导体(ST).英国ARM和芬兰诺基亚(Nokia)4家公司共同成立.MIPI联盟旨在推进 ...

  10. nginx 的 proxy_cache 缓存配置

    开头:某个项目涉及到 视频切片下载到本地,然后提供服务给客户端.一个视频有多个文件,存储在本地路径下.当客户端请求的视频在本地没有就会回源, 回源拿到的视频文件再返回给客户端,同时在本地缓存一份,提供 ...