概要:
学习Linq的第一篇,认识什么是Linq,了解LQ相关的知识和一个简单的LQ例子。
此系列是我的学习笔记,来源:http://www.cnblogs.com/lovecherry/
内容:
LinQ是基于关系数据的语言集成查询,用于以对象形式管理的关系数据的查询功能。
LinQ包括:Linq to sql,Linq to xml,Linq toobjects,Linq to dataset等。
这里只学习Linq to sql,我将这个简写为LQ。纯属个人行为,不知道这样是不是规范?!
其中LinQ中Linq to objects是核心,Linq to xml 也有广泛的应用。而Linq to sql我认为是最易入门和常用的。
LinQ是在c#3.0下的,所以必须是在vs2008或vs2010下学习。本人用的是vs2010。
在这里要认识一些c#3.0里新曾的一些东西:
1,Var声明:新增的东西,声明隐含类型局部变量,因为是隐含类型,所以声明时必须赋值,让系统判断类型。这个用法跟JS中差不多。
2,LQ中常用的匿名类型:
VarUser=new {Login=”admin”,PWD=123456};//无须显示定义
3,扩展方法:
扩展方法只能在静态类定义且是静态方法。这个用到的时候再说。
4,Lambda表达式:
(参数列表)=>表达式或语句块
一个简单的例子:
在vs2010(或vs2008)中新建一个consoleApplication,会发现这时的.cs文件会比vs2005中多个引用空间:using System.Linq;。这个是在c#3.0后才有的。
由于代码很少,都贴了:
usingSystem;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SQDemo1conApp
{
public class Person
{
public string username { get; set; }
public int age { get; set; }
}
class Program
{
static void Main(string[] args)
{
var persons = new List<Person> {
new Person {username = "a", age=19},
new Person {username = "b", age=20},
new Person {username = "c", age=21}
};
//select username.ToUpper() from persons where age>=20
//var selectperson = from p in persons where p.age >= 20 selectp.username.ToUpper();
var selectperson = persons.Where(p => p.age >= 20).Select(p =>p.username.ToUpper());
foreach (var p in selectperson)
Console.WriteLine(p);
Console.ReadKey();
}
}
}
其中varselectperson = from p in persons where p.age >= 20 selectp.username.ToUpper();
等同于varselectperson = persons.Where(p => p.age >= 20).Select(p =>p.username.ToUpper());
它的意思就类似与T-sql中的select username.ToUpper() frompersons where age>=20
注意=>和>=是不同的,代表不同的意思。
LQ据说可以实现T-sql 90%功能,只有部分复杂功能难以实现。LQ的select是写在后面的,这个跟T-sql中不大一样。