LINQ学习笔记(一)基本语法
1、LINQ简介
LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。包括五个部分:LINQ to Objects、LINQ to DataSets、LINQ to SQL、LINQ to Entities、LINQ to XML。最常用的就是LINQ to SQL。
2、LINQ TO SQL 语法
基本格式: from p in 表名
where 条件
select p
- where 操作:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句
eg:var q = from c in db.Customers where c.City == "London" select c;
- Select/Distinct操作:与SQL中的Select作用相似,但是位置不同,Select及所接子句是放在表达式最后并把子句中的变量也就是结果返回回来
Select/Distinct操作包括9种形式:
简单用法:
eg:var q = from c in db.Customers select c.ContactName
匿名类型形式:其实质是编译器根据我们自定义自动产生一个匿名的类来帮助我们实现临时变量的储存。匿名类型还依赖于另外一个特性:支持根据property来创建对象。比如,var d = new { Name = "s" };编译器自动产生一个有property叫做Name的匿名类,然后按这个类型分配内存,并初始化对象。
eg:var q = from e in db.Employees
select new { Name = e.FirstName + " " + e.LastName, Phone = e.HomePhone }
条件形式:生成SQL语句为:case when condition then else
eg:var q = from p in db.Products
select new { p.ProductName,
Availability = p.UnitsInStock - p.UnitsOnOrder < 0 ? "Out Of Stock" : "In Stock" };
指定类型形式:该形式返回你自定义类型的对象集
eg:var q = from e in db.Employees
select new Name { FirstName = e.FirstName, LastName = e.LastName };
筛选形式:结合where使用,起到过滤作用
eg:var q = from c in db.Customers where c.City == "London" select c.ContactName
整形类型形式:其select操作使用了匿名对象,而这个匿名对象中,其属性也是个匿名对象
eg:var q = from c in db.Customers
select new { c.CustomerID,
CompanyInfo = new {c.CompanyName, c.City, c.Country},
ContactInfo = new {c.ContactName, c.ContactTitle} };
嵌套类型形式:LINQ语句可以多层嵌套
eg:
var q = from o in db.Orders select new { o.OrderID, DiscountedProducts = from od in o.OrderDetails where od.Discount > 0.0 select od, FreeShippingDiscount = o.Freight };
本地方法调用形式:可以调用本地方法
eg:
var q = from c in db.Customers where c.Country == "UK" || c.Country == "USA" select new { c.CustomerID, c.CompanyName, Phone = c.Phone, InternationalPhone = PhoneNumberConverter(c.Country, c.Phone) }; public string PhoneNumberConverter(string Country, string Phone) { Phone = Phone.Replace(" ", "").Replace(")", ")-"); switch (Country) { case "USA": return "1-" + Phone; case "UK": return "44-" + Phone; default: return Phone; } }
Distinct形式:筛选字段中不相同的值。用于查询不重复的结果集
eg:var q = ( from c in db.Customers select c.City ) .Distinct();
- Count/Sum/Min/Max/Avg操作符:统计一些数据的个数,求和,最小值,最大值,平均数
Count方法的两种方式:
1、简单形式:var q = db.Customers.Count()
2、带条件形式:var q = db.Products.Count(p => !p.Discontinued);
Sum/Min/Max/Avg方法的两种方式:
1、简单形式:var q = db.Orders.Select(o => o.Freight).Sum();
2、映射形式:var q = db.Products.Sum(p => p.UnitsOnOrder);