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

以前一直用 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反射一下,会发现实际上编译器自动生成了类似以下代码:(部分名称做了友好处理) 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值