[MSDN]C# 3.0 锐利体验系列课程 之三 查询表达式LINQ (1)

C# 3.0 锐利体验系列课程(3):
查询表达式LINQ (1)
李建忠
jianzhong.lee@gmail.com
祝成科技高级培训讲师
www.softcompass.com

 


LINQ简介
• OO(面向对象)以外的疆域:信息的访问与整合。关系数据库与XML为其中的典型应用。
• .NET Language Integrated Query (LINQ):不采用特定於关系数据库或者XML的专有方案,而采用
通用方案来解决各种信息源的访问与整合问题。
• 在LINQ中,查询成为编程语言的一个组成部分,这使得查询表达式可以得到很好的编译时语法检
查,丰富的元数据,智能感知等强类型语言的好处。 

 

初识LINQ表达式
class app {
static void Main() {
            string[] names = { "Burke", "Connor", "Frank",
"Everett", "Albert", "George",
"Harris", "David" };
            IEnumerable<string> query = from s in names
                                        where s.Length == 5
                                        orderby s
                                        select s.ToUpper();
            foreach (string item in query)
                Console.WriteLine(item);
       
}
}

查询表达式解析(1)
IEnumerable<string> query = from s in names
                                        where s.Length == 5
                                        orderby s
                                        select s.ToUpper();
在语义上等同于如下“方法风格(基于方法)的查询”:
IEnumerable<string> query = names
                                        .Where(s => s.Length == 5)
                                        .OrderBy(s => s)
                                        .Select(s => s.ToUpper());

查询表达式解析(2)
注意其中的参数为lambda 表达式,类似于如下委托:
Func<string, bool> filter = delegate (string s) {
                                        return s.Length == 5;};
Func<string, string> extract = delegate (string s) {
                                        return s; };
Func<string, string> project = delegate (string s) {
                                        return s.ToUpper(); };
IEnumerable<string> query = names.Where(filter)
                                        .OrderBy(extract)
                                        .Select(project);

查询操作符与扩展方法解析(1)
查询操作符是LINQ中的另外一项重要设施,LINQ使用扩展方法来定义查询操作符,例如where操作符:
namespace System.Linq {
public static class Enumerable {
public static IEnumerable<T> Where<T>(
this IEnumerable<T> source, Func<T, bool> predicate) {
                                        foreach (T item in source)
                                            if (predicate(item))
                                                yield return item;
}
}
}

查询操作符与扩展方法解析(2)
普通的方式来调用扩展方法:
IEnumerable<string> query = Enumerable.Where(names,
                                        s => s.Length < 6);
C#语言允许我们使用如下的方式来调用扩展方法:
IEnumerable<string> query = names.Where(s => s.Length < 6);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值