系列文章导航:
走进Linq--Linq横空出世篇
走进Linq-辉煌的背后
走进Linq-Linq大观园
不能不说的C#特性-对象集合初始化器
不能不说的C#特性-匿名类型与隐式类型局部变量
不能不说的C#特性-扩展方法
不能不说的C#特性-匿名方法和Lambda表达式
不能不说的C#特性-迭代器(上)及一些研究过程中的副产品
不能不说的C#特性-迭代器(下),yield以及流的延迟计算
走进Linq-Linq to Objects(上)基础篇
走进Linq-Linq to Objects(下)实例篇
走进Linq-Linq to SQL感性认识篇
走进Linq-Linq to SQL How do I(1)
走进Linq-Linq to SQL How do I(2)
走进Linq-Linq to SQL How do I(3)
走进Linq-How do I(4)拾遗补零篇第一节
走进Linq-Linq to SQL源代码赏析 Table 的获取过程
走进Linq-Linq to SQL源代码赏析之Provider的初始化
走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq
文章发布后大家有些人叫做,心里窃喜,不过压力也大增,我很想按照简洁明快的文风写下去,不过讲技术的文章很难不落于沉闷,所以我努力了。(题外话:这几天猛看幽默小说,想把文字写的幽默一点,开个玩笑,呵呵)
经过几天的闭关编程大师又有了一些新的觉悟了,不管对DSL还是命令式编程和函数式编程都有了新的理解。如是他又接着了漫长的云游。第一站当然就是那个曾经让他结下心结的那个刚毕业的coder。
大师:“嘿,这几日可好,还在发牢骚么?”
Coder:“不了,正好你来了,让你看看我的程序”,Coder将他的电脑屏幕转向大师,期盼的眼神表明他急切的期望得到大师的夸奖。
如是大师看到了如下一些代码:
///
///
一个通用的泛型委托,代表接受一个参数并有一个返回值的方法
///
///
输入参数类型
///
返回值类型
///
输入参数
///
返回值
public
delegate
TOutput MyDelegate
<
TInput,TOutput
>
(TInput input);
///
///
这个类是包含有对IEnumerable
接口的一系列扩展方法
///
因为在.net里所有的集合类都实现了IEnumerable
接口
///
所以对该接口的扩展将扩散到所有集合
///
public
static
class
Extension
{
public
static
IEnumerable
<
TInput
>
Where
<
TInput
>
(
this
IEnumerable
<
TInput
>
self, MyDelegate
<
TInput,
bool
>
filter)
{
foreach
(TInput item
in
self)
if
(filter(item))
yield
return
item;
}
public
static
IEnumerable
<
TOutput
>
Select
<
TInput, TOutput
>
(
this
IEnumerable
<
TInput
>
self, MyDelegate
<
TInput, TOutput
>
selector)
{
foreach
(TInput item
in
self)
yield
return
selector(item);
}
//
下面有更多的SQL风格的移植
}
下面是我做的个小测试代码:
public
class
Program
{
public
static
void
Main()
{
IList books =
new
List {
new
Book { Title =
"
Inside COM
"
, ISBN =
"
123-456-789
"
,Price=
20
},
new
Book { Title =
"
Inside C#
"
, ISBN =
"
123-356-d89
"
,Price=
100
},
new
Book { Title =
"
Linq
"
, ISBN =
"
123-d56-d89
"
, Price =
120
}
};
var result = books.Where(book => book.Title ==
"
Linq
"
).Select(book =>
new
{
Key = book.Title,Value=book.Price
});
}
}