Linq之ToDictionary<TSource, TKey, TElement>的写法

简介: 以前一直用 var query = xxx.Select(c=>new {c.X,c.Y}); 来取表中的某二列字段,今天有个应用需要转成Dictionary,很少这样使用,居然忘记了写法!   回忆了半天终于写对了,贴在这里备个份,方便以后查找: using System;using System.

以前一直用 var query = xxx.Select(c=>new {c.X,c.Y}); 来取表中的某二列字段,今天有个应用需要转成Dictionary<T,U>,很少这样使用,居然忘记了写法!

 

回忆了半天终于写对了,贴在这里备个份,方便以后查找:

using  System;
using  System.Collections.Generic;
using  System.Linq;

namespace  DicTest
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {
            List
< Test >  lst  =   new  List < Test > ();
            
for  ( int  i  =   0 ; i  <   10 ; i ++ )
            {
                lst.Add(
new  Test() { Id  =  Guid.NewGuid(), Num  =  i, Name  =  i.ToString() });
            }

            
Dictionary < Guid,  int >  dic  =  lst.ToDictionary( new  Func < Test, Guid > (c  =>  c.Id),  new  Func < Test,  int > (c  =>  c.Num));
//如果觉得上面的写法太复杂,还可以简化为
// Dictionary<Guid, int> dic = lst.ToDictionary(c => c.Id, c => c.Num);   

            
foreach  (Guid Id  in  dic.Keys)
            {
                Console.WriteLine(
" Key:{0}\tValue:{1} " , Id, dic[Id]);
            }

            Console.Read();
        }
    }


    
public   class  Test
    {
        
public  Guid Id {  set get ; }
        
public   int  Num {  set get ; }
        
public   string  Name {  set get ; }
    }
}

 

如果用Reflector反射一下,会发现实际上编译器自动生成了类似以下代码:(部分名称做了友好处理) 

img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
[CompilerGenerated]
private   static  Func < Test, Guid >  funcGuid;
 
[CompilerGenerated]
private   static  Func < Test,  int >  funcInt;
 
[CompilerGenerated]
private   static   int  mNum(Test c)
{
    
return  c.Num;
}
 
[CompilerGenerated]
private   static  Guid mId(Test c)
{
    
return  c.Id;
}


private   static   void  Main( string [] args)
{
    List
< Test >  lst  =   new  List < Test > ();
    
for  ( int  i  =   0 ; i  <   10 ; i ++ )
    {
        Test _t 
=   new  Test();
        _t.Id 
=  Guid.NewGuid();
        _t.Num 
=  i;
        _t.Name 
=  i.ToString();
        lst.Add(_t);
    }
    Dictionary
< Guid,  int >  dic  =  lst.ToDictionary < Test, Guid,  int > ((funcGuid  !=   null ?  funcGuid : (funcGuid  =   new  Func < Test, Guid > (Program.mId)), (funcInt  !=   null ?  funcInt : (funcInt  =   new  Func < Test,  int > (Program.mNum)));
    
foreach  (Guid Id  in  dic.Keys)
    {
        Console.WriteLine(
" Key:{0}\tValue:{1} " , Id, dic[Id]);
    }
    Console.Read();
}

 

 

PS:今天写的好象都是些水文 :)

目录
相关文章
|
7月前
|
人工智能 运维 自然语言处理
电力+AI,「国网云智」重构电网运维的"超级大脑"
在深夜,当城市楼宇渐入梦乡时,在国网信通公司云运营中心还有一批运维工程师默默守护着大家微弱的灯光、此起彼伏的沟通声、咔咔的键盘敲击声响彻着每个工位。 当某系统的异常警报亮起时,工程师迅速利用「国网云智」定位问题,屏幕上即刻弹出详尽的排查方案及解决方案;而另一侧的监控员框选闪烁的告警区域,系统已自动锁定故障点,并在生成检修方案上标注了对应的工具清单和操作优先级。
755 0
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
221341 69
|
消息中间件 弹性计算 Java
|
C# 索引
C# 一分钟浅谈:接口与抽象类的区别及使用
【9月更文挑战第2天】本文详细对比了面向对象编程中接口与抽象类的概念及区别。接口定义了行为规范,强制实现类提供具体实现;抽象类则既能定义抽象方法也能提供具体实现。文章通过具体示例介绍了如何使用接口和抽象类,并探讨了其实现方式、继承限制及实例化差异。最后总结了选择接口或抽象类应基于具体设计需求。掌握这两者有助于编写高质量的面向对象程序。
883 5
|
存储 监控 数据库
什么是聚集索引和非聚集索引?
【8月更文挑战第3天】
9145 6
|
存储 缓存 数据库
如果不知道这4种缓存模式,敢说懂缓存吗?
在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交道,最起码也实践过。
349 0
|
1天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
2991 12
|
12天前
|
人工智能 自然语言处理 监控
OpenClaw skills重构量化交易逻辑:部署+AI全自动炒股指南(2026终极版)
2026年,AI Agent领域最震撼的突破来自OpenClaw(原Clawdbot)——这个能自主规划、执行任务的智能体,用50美元启动资金创造了48小时滚雪球至2980美元的奇迹,收益率高达5860%。其核心逻辑堪称教科书级:每10分钟扫描Polymarket近千个预测市场,借助Claude API深度推理,交叉验证NOAA天气数据、体育伤病报告、加密货币链上情绪等多维度信息,捕捉8%以上的定价偏差,再通过凯利准则将单仓位严格控制在总资金6%以内,实现低风险高频套利。
6512 58

热门文章

最新文章