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语法 ...
随机推荐
- Win7下Netsh虚拟Wi-Fi
Netsh的字面意思是网络外壳,其实它是一个命令行实用程序,最初出现于Windows 2000操作系统,它可以帮助管理WINDOWS中的网络设置.此后,微软不断对它进行改进,给它增加了一些新的命令集. ...
- winfrom 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中
1.通过NUGET管理器下载nopi,在引入命令空间 using System; using System.Collections.Generic; using System.Text; using ...
- css 边框使用
https://www.cnblogs.com/luka/p/5677241.html 1. 应用边框样式 先从控制边框样式的属性开始.简单边框有三个关键属性:border-width.border- ...
- 184使用 Core Image 框架处理照片
实现图片的老旧.色彩.旋转效果 (1)使用 StoryBoard 故事版布局界面: (2)使用 Core Image 框架的 CIFilter 过滤器:分别对应的过滤器名称是:CISepiaTone( ...
- javascript的特殊条件语句
摘要: 由于javascript语言的特殊性导致它有很多特殊的条件判断,下面我列出了一些特殊的条件判断语句和他们对应的结果. if(condition) { console.log(true); ...
- 使用pyinotify实现加强版的linux tail -f 命令,并且对日志类型的文本进行单独优化着色显示。
tail -f命令不能自动切换切片文件,例如日志是每100M生成一个新文件,tail -f不能自动的切换文件,必须关闭然后重新运行tail -f 此篇使用pyinotify,检测文件更新,并实现tai ...
- [web] spring boot 整合MyBatis
1.maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- [Converge] Backpropagation Algorithm
Ref: CS231n Winter 2016: Lecture 4: Backpropagation Ref: How to implement a NN:中文翻译版本 Ref: Jacobian矩 ...
- js 或 且 非
给定 x=6 以及 y=3,下表解释了逻辑运算符: 运算符 描述 例子 && and (x < 10 && y > 1) 为 true || or (x== ...
- Android反编译工具介绍与简单实用方法
Android反编译的目的无非就是为了看到APK的xml.资源和代码: 得到代码的方式:直接解压APK文件 --> 得到classes.dex文件 --> 使用 dex2jar class ...