LINQ对于笔者来说, 优美而浓缩的代码让人震惊. 研究LINQ就是在艺术化自己的代码.
之前只是走马观花学会了基本的语法, 但是经常在CSDN看到令人惊讶自叹不如的LINQ代码, 还是让人羡慕嫉妒恨, 真有一种心血来潮想追赶的冲动.
所以, 还是决定系统的学习一下LINQ.
(1.4) LINQ to Objects
这是一个简单的hello world性质的例子.
1 var words = new List<string>() { "hello", "wonderful","linq","beautiful","world"}; 2 var res = from s in words 3 where s.Length <= 5 4 select s; 5 Console.WriteLine("输出串长度<=5的单词:" + Environment.NewLine); 6 foreach (var m in res) 7 { 8 Console.WriteLine(m); 9 }10 11 //按字母顺序对一个单词进行排序,然后按照其长度进行分组,并按照其中包含的单词长度逆序排列各组.12 Console.WriteLine(Environment.NewLine + "按长度分组排序显示:" + Environment.NewLine);13 var res1 = from s in words14 orderby s ascending //ascending升序15 group s by s.Length into lengroup16 orderby lengroup.Key descending //descending降序17 select new { Length = lengroup.Key, Words = lengroup };18 foreach (var m in res1)19 {20 Console.WriteLine("单词长度:" + m.Length);21 foreach (var str in m.Words)22 Console.WriteLine(" " + str);23 }
结果如下图:
现在, 对于List<>进行数据处理, 我就只用 LINQ to Objects了.
(1.5) LINQ to
上代码:
1 class Book 2 { 3 public string Publisher; 4 public string Title; 5 public int Year; 6 7 public Book(string title, string publisher, int year) 8 { 9 this.Title = title;10 this.Publisher = publisher;11 this.Year = year;12 }13 }
1 Book[] books = new Book[]{ 2 new Book("Ajax in Action","Manning",2005), 3 new Book("Windows Froms in Action","Manning",2006), 4 new Book("Rss and Atom in Action","Manning",2006) 5 }; 6 XElement new XElement("books", 7 from s in books 8 where s.Year == 2006 9 select new XElement("book",10 new XAttribute("title", s.Title),11 new XElement("publisher", s.Publisher)12 ));13 Console.WriteLine(
结果如下图:
看上去LINQ to
另外, LINQ to
(1.6) LINQ to SQL
下面的代码的几点说明:
1. 首先需要定义一个实体类, 用以和Northwind数据的Contacts数据表关联起来.
本文所用的Northwind数据是微软提供演示的, 你可以自己去下. 也可以自己创建一个.
2. 自定义属性 [Table(Name = "Contacts")], 这个你得引入System.data.linq, 否则你懂的.
3. 自定义属性 [Column(Name = "Name")], 在代码中用于定义与数据表中列的对应关系.
1 static class HelloLinqToSql 2 { 3 [Table(Name = "Contacts")] 4 public class Contact 5 { 6 [Column(IsPrimaryKey = true)] 7 public int ContactID { get; set; } 8 [Column(Name = "Name")] 9 public string Name { get; set; }10 [Column]11 public string City { get; set; }12 }13 }
4. DataContext是设备上下文, 你肯定知道是用来传入连接字符串的
5. 连接字符串中的 security=SSPI 使用windows自带的安全验证机制, 不用输入用户名与密码.
6. DataContext.GetTable<>, 这个是泛型的, 注意到没有? 允许你操作强类型对象.
1 DataContext db = new DataContext(@"server=(local);integrated security=SSPI;database=Northwind"); 2 3 var contacts = 4 from contact in db.GetTable<HelloLinqToSql.Contact>() 5 where contact.City == "武汉" 6 select contact; 7 8 Console.WriteLine("查找在武汉的联系人"+Environment.NewLine); 9 foreach (var contact in contacts)10 Console.WriteLine("联系人: " + contact.Name.Trim()+" ID:"+contact.ContactID);
结果如下图:
这个效果, 真是颠覆了我对关系数据库操作认知!
下面的事, 都被LINQ承包了:
- 打开数据库连接
- 生成SQL查询
- 执行SQL查询
- 将执行结果填充至对象中
原创文章,出自"博客园, 猪悟能'S博客" : http://www.cnblogs.com/hackpig/
原标题:LinQ实战学习笔记(一) LINQ to (Objects, XML, SQL) 入门初步
关键词:sql