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语法 ...
随机推荐
- Cisco配置VLAN+DHCP中继代理+NAT转发上网
实验环境: 路由器 使得TP-link 设置NAT转发使用,tp-link路由器网关设置成 192.168.30.254 (核心层)Cisco 3550三层交换机(型号C3550-I5Q3L2-M)配 ...
- win10上跑 sqlserver 2000应用程序
将SQL Server 安装程序\X86\SYSTEM\SQLUNIRL.DLL 替换到Win10 的 C:\windows\system32\目录下,64位win10 还要复制到SYSWOW64目录 ...
- u3d DontDestroyOnLoad多场景问题
using UnityEngine; using System.Collections; public class DontDel : MonoBehaviour { public GameObjec ...
- vi编辑器的使用方式
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...
- 百度编辑器插入视频、iframe 失败
插入失败是因为编辑器的xssFilter过滤,导致插入出现异常 文件位置:ueditor.config.js ,大概在428行加上 video: ['autoplay', 'controls', 'l ...
- VCL 中的 Windows API 函数(1): AbortDoc
AbortDoc: 该函数终止当前打印作业并删除最好一次调用 StartDoc 函数写入的所有信息. 该函数在 Printers 单元的应用:AbortDoc(Canvas.Handle);
- react解析html标签组成的字符串
转载自:https://blog.csdn.net/tongshuo_11/article/details/61195232 var content = '<strong>content& ...
- 表达式树(Expression Tree)
你每创建一个表示表达式的实例时,都可以将该类型实例看成是一棵表达式树.每种表示表达式的类型都有一个具体的类型,如Expression的Variable()方法创建的是ParameterExpressi ...
- Win7 共享打印机 “错误:共享无法保存设置”
原因:windows的后台防火墙服务进程[Windows Firewall{服务描述}.MpsSvc{服务名字}] 关闭了.services.smc 关闭 解决:重启服务 关闭防火墙的功能,通过控制面 ...
- 存储过程打印超过8000的VARCHAR字符的问题
DECLARE @info NVARCHAR(MAX) --SET @info to something big PRINT CAST(@info AS NTEXT) 这样就可以输出超过8000的字符 ...