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:今天写的好象都是些水文 :)

目录
相关文章
|
3月前
|
SQL 开发框架 .NET
聊聊 System.Linq.Dynamic,以及分享一个使用 System.Linq.Dynamic 扩展 LINQ 查询的详细例子
聊聊 System.Linq.Dynamic,以及分享一个使用 System.Linq.Dynamic 扩展 LINQ 查询的详细例子
100 0
|
6月前
|
SQL 开发框架 .NET
C#linq表达式的应用
C#linq表达式的应用
39 0
|
SQL 开发框架 .NET
SQL中in和not in在LINQ中的写法
SQL中in和not in在LINQ中的写法
|
.NET
LINQ 如何动态创建 Where 子查询
还是那句话,十年河东,十年河西,莫欺少年穷! 学无止境,精益求精... 今天探讨下如何构造动态的LINQ子查询 LINQ,相信大家都写过,很简单,下面以一个基本的范例说明下: namespace ConsoleMe { class Program {...
1715 0
C#LinQ语法
Unity开发VR之Vuforia 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar ...
1070 0
|
XML .NET 数据库
|
.NET 数据库 Windows
|
.NET 开发框架 编译器