LinQ实战学习笔记(一) LINQ to (Objects, XML, SQL) 入门初步
LINQ对于笔者来说, 优美而浓缩的代码让人震惊. 研究LINQ就是在艺术化自己的代码.
之前只是走马观花学会了基本的语法, 但是经常在CSDN看到令人惊讶自叹不如的LINQ代码, 还是让人羡慕嫉妒恨, 真有一种心血来潮想追赶的冲动.
所以, 还是决定系统的学习一下LINQ.
(1.4) LINQ to Objects
这是一个简单的hello world性质的例子.
var words = new List<string>() { "hello", "wonderful","linq","beautiful","world"};
var res = from s in words
where s.Length <=
select s;
Console.WriteLine("输出串长度<=5的单词:" + Environment.NewLine);
foreach (var m in res)
{
Console.WriteLine(m);
} //按字母顺序对一个单词进行排序,然后按照其长度进行分组,并按照其中包含的单词长度逆序排列各组.
Console.WriteLine(Environment.NewLine + "按长度分组排序显示:" + Environment.NewLine);
var res1 = from s in words
orderby s ascending //ascending升序
group s by s.Length into lengroup
orderby lengroup.Key descending //descending降序
select new { Length = lengroup.Key, Words = lengroup };
foreach (var m in res1)
{
Console.WriteLine("单词长度:" + m.Length);
foreach (var str in m.Words)
Console.WriteLine(" " + str);
}
结果如下图:
现在, 对于List<>进行数据处理, 我就只用 LINQ to Objects了.
(1.5) LINQ to XML 初步
上代码:
class Book
{
public string Publisher;
public string Title;
public int Year; public Book(string title, string publisher, int year)
{
this.Title = title;
this.Publisher = publisher;
this.Year = year;
}
}
Book[] books = new Book[]{
new Book("Ajax in Action","Manning",),
new Book("Windows Froms in Action","Manning",),
new Book("Rss and Atom in Action","Manning",)
};
XElement xml = new XElement("books",
from s in books
where s.Year ==
select new XElement("book",
new XAttribute("title", s.Title),
new XElement("publisher", s.Publisher)
));
Console.WriteLine(xml);
结果如下图:
看上去LINQ to XML从表达上比DOM更加形象.这代码和它生成的XML结构基本上是"所见即所得"的.
另外, LINQ to XML是以元素为中心的, 而DOM是以文档为中心的.
(1.6) LINQ to SQL
下面的代码的几点说明:
1. 首先需要定义一个实体类, 用以和Northwind数据的Contacts数据表关联起来.
本文所用的Northwind数据是微软提供演示的, 你可以自己去下. 也可以自己创建一个.
2. 自定义属性 [Table(Name = "Contacts")], 这个你得引入System.data.linq, 否则你懂的.
3. 自定义属性 [Column(Name = "Name")], 在代码中用于定义与数据表中列的对应关系.
static class HelloLinqToSql
{
[Table(Name = "Contacts")]
public class Contact
{
[Column(IsPrimaryKey = true)]
public int ContactID { get; set; }
[Column(Name = "Name")]
public string Name { get; set; }
[Column]
public string City { get; set; }
}
}
4. DataContext是设备上下文, 你肯定知道是用来传入连接字符串的
5. 连接字符串中的 security=SSPI 使用windows自带的安全验证机制, 不用输入用户名与密码.
6. DataContext.GetTable<>, 这个是泛型的, 注意到没有? 允许你操作强类型对象.
DataContext db = new DataContext(@"server=(local);integrated security=SSPI;database=Northwind"); var contacts =
from contact in db.GetTable<HelloLinqToSql.Contact>()
where contact.City == "武汉"
select contact; Console.WriteLine("查找在武汉的联系人"+Environment.NewLine);
foreach (var contact in contacts)
Console.WriteLine("联系人: " + contact.Name.Trim()+" ID:"+contact.ContactID);
结果如下图:
这个效果, 真是颠覆了我对关系数据库操作认知!
下面的事, 都被LINQ承包了:
- 打开数据库连接
- 生成SQL查询
- 执行SQL查询
- 将执行结果填充至对象中
原创文章,出自"博客园, 猪悟能'S博客" : http://www.cnblogs.com/hackpig/
LinQ实战学习笔记(一) LINQ to (Objects, XML, SQL) 入门初步的更多相关文章
- LinQ实战学习笔记(四) LINQ to Object, 常用查询操作符
这一篇介绍了下面的内容: 查询object数组 查询强类型数组 查询泛型字典 查询字符串 SelectMany 索引 Distinct操作符 排序 嵌套查询 分组 组连接 内连接 左外连接 交叉连接 ...
- LinQ实战学习笔记(三) 序列,查询操作符,查询表达式,表达式树
序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留 ...
- LinQ实战学习笔记(二) C#增强特性
C# 为支持LINQ添加了许多语言特性: 隐式类型局部变量 对象初始化器 Lambda表达式 扩展方法 匿名类型 了解这些新特性是全面了解LINQ的重要先解条件,因此请不要忽视它们. (一) 隐式类 ...
- Redis in Action : Redis 实战学习笔记
1 1 1 Redis in Action : Redis 实战学习笔记 1 http://redis.io/ https://github.com/antirez/redis https://ww ...
- Nodejs学习笔记(十六)--- Pomelo介绍&入门
目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...
- Nodejs学习笔记(十六)—Pomelo介绍&入门
前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...
- mybatis 学习笔记(二):mybatis SQL注入问题
mybatis 学习笔记(二):mybatis SQL注入问题 SQL 注入攻击 首先了解下概念,什么叫SQL 注入: SQL注入攻击,简称SQL攻击或注入攻击,是发生于应用程序之数据库层的安全漏洞. ...
- 学习Vue 入门到实战——学习笔记
闲聊: 自从进了现在的公司,小颖就再没怎么接触vue了,最近不太忙,所以想再学习下vue,就看了看vue相关视频,顺便做个笔记嘻嘻. 视频地址:Vue 入门到实战1.Vue 入门到实战2 学习内容: ...
- XML学习笔记(四)-- 修饰XML文档的CSS
标签(空格分隔): 学习笔记 XML为存储结构化数据提供了强大的方法,但是它没有提供关于数据如何显示地信息,(数据的结构与数据表示无关).可以使用CSS来控制XML文档中各元素的呈现方式. CSS语法 ...
随机推荐
- 如何让Snippet Compiler 2008 支持linq
转载自:http://www.cnblogs.com/hbb0b0/archive/2009/09/01/1557832.html 注意,下面的图和上面的图,有些不同 上面是在 FileSystem ...
- Intellij Idea反向生成Hibernate实体类
每次根据数据库的表反向生成实体类老不记得步骤...脑子不够用,这里特意记录一下.碰到的问题也及时更新到这里来. 1. 工程添加Hibernate支持 两种方式: 第一种:工程上右键选择 "A ...
- linux中wget命令
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...
- php中urlencode()和urldecode()URL编码函数浅析[转]
URLEncode:是指针对网页url中的中文字符的一种编码转化方式,最常见的就是Baidu.Google等搜索引擎中输入中文查询时候,生成经过Encode过的网页URL.URLEncode的方式一般 ...
- greenplum的用法
gp建表的实例 gp 创建外部表的实例:(外部表不能建立分布键) CREATE EXTERNAL TABLE user_app_tag ( ...
- level 1 -- unit 2 - what 引导的特殊疑问句
特殊疑问句 what 引导的特殊疑问句 常见结构如下: 1. what be sb/sth? 1.1 如 谓语动词是单数is what is your phone number ? what is y ...
- ABBYY FineReader 14助力2017,正式进入新纪元
ABBYY FineReader 12自2014年推出以来,已经给万千用户的工作带来了便捷,蝉联优秀殊荣这么久,相信不少用户早在期待新版本的到来了吧.这不,ABBYY FineReader 14问世了 ...
- 怎么用ABBYY在线浏览PDF文件
ABBYY FineReader 让您可以从在线存储服务中打开图像或 PDF 文件,并将已识别文本保存至在线存储服务中,如 Dropbox.SkyDrive 或 Google Drive 等.通过在 ...
- win7 IIS7 发布网站遇到 HTTP 错误 500.19 由于权限不足
win7 IIS7 发布网站遇到 HTTP 错误 500.19 - Internal Server Error 一看是5xx错误,就知道是服务器的问题,网上查了下,原来是权限问题 解决方法 ...
- scrapy 元素的相对xpath