例子二 : Enumerable.Except()

两个IEnumerable<T>兼容的对象的差集

static   void  GetDiff()
{
List
< string >  myCars  =   new  List < String >
" Yugo " " Aztec " " BMW " };
List
< string >  yourCars  =   new  List < String >
" BMW " " Saab " " Aztec "  };
var carDiff 
= (from c  in  myCars select c)
.Except(from c2 
in  yourCars select c2);
Console.WriteLine(
" Here is what you don't have, but I do: " );
foreach  ( string  s  in  carDiff)
Console.WriteLine(s); 
//  Prints Yugo.
}

 

 

-------------------------------------------------

在投影操作中,由于结果集合类型是隐式的,在编译时才能确定,所以这里强制规定必须使用var

//  Error! Can't return a var data type!
static  var GetProjectedSubset()
{
Car[] myCars 
=   new  Car[] {
new  Car{ PetName  =   " Henry " , Color  =   " Silver " , Speed  =   100 , Make  =   " BMW " },
new  Car{ PetName  =   " Daisy " , Color  =   " Tan " , Speed  =   90 , Make  =   " BMW " },
new  Car{ PetName  =   " Mary " , Color  =   " Black " , Speed  =   55 , Make  =   " VW " },
new  Car{ PetName  =   " Clunker " , Color  =   " Rust " , Speed  =   5 , Make  =   " Yugo " },
new  Car{ PetName  =   " Melvin " , Color  =   " White " , Speed  =   43 , Make  =   " Ford " }
};

var makesColors 
=  from c  in  myCars select  new  { c.Make, c.Color };
return  makesColors;  //  Nope!
}


可以使用ToArray<T>()把投影结果集转化为标志的CRL数组对象:

//  Return value is now an Array.
static  Array GetProjectedSubset()
{
Car[] myCars 
=   new  Car[]{
new  Car{ PetName  =   " Henry " , Color  =   " Silver " , Speed  =   100 , Make  =   " BMW " },
new  Car{ PetName  =   " Daisy " , Color  =   " Tan " , Speed  =   90 , Make  =   " BMW " },
new  Car{ PetName  =   " Mary " , Color  =   " Black " , Speed  =   55 , Make  =   " VW " },
new  Car{ PetName  =   " Clunker " , Color  =   " Rust " , Speed  =   5 , Make  =   " Yugo " },
new  Car{ PetName  =   " Melvin " , Color  =   " White " , Speed  =   43 , Make  =   " Ford " }
};
var makesColors 
=  from c  in  myCars select  new  { c.Make, c.Color };
//  Map set of anonymous objects to an Array object.
//  Here were are relying on type inference of the generic
//  type parameter, as we don't know the type of type!
return  makesColors.ToArray();
}


注意:

1、不能给ToArray<T>()指定类型,因为这里是隐式类型,到编译时才可用。
2、不能使用System.Array 的定义语法,只能使用该对象,同样因为隐式类型。
3、当需要使用投影的查询结果集时,把其转换为Array类型是必须的,当然这样会丢失强类型的好处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值