.NET LINQ 通常分 Syntax Query 和Syntax Method
LINQ To SQL 增、删、改
添加 InsertOnSubmit(单个对象) 或 InsertAllOnSubmit(集合)
删除 DeleteOnSubmit (单个对象) DeleteAllOnSubmit(集合)
SubmitChanges() 提交数据库
//创建LINQDB数据库上下文的实例
添加
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
//创建用户对象
UserInfo user = new UserInfo();
user.Username = t_UserName.Text; //赋值
user.Password = t_PassWord.Text;
user.Email = t_Email.Text;
try
{
db.UserInfo.InsertOnSubmit(user);//添加到数据库中
db.SubmitChanges();//提交更新
Response.Write(“”);
}
catch (Exception)
{
throw;
}
更新
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
var result = from u in db.UserInfo
where u.ID == Convert.ToInt32(e.CommandArgument)
select u; //找到需要修改记录
foreach (var item in result) //重新赋值
{
item.Username = t_UserName.Text;
item.Email = t_Email.Text;
}
db.SubmitChanges();//提交修改
删除
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
int id=Convert.ToInt32(e.CommandArgument);
var result = from UserInfo u in db.UserInfo
where u.ID == id
select u; //找到需要删除的记录
db.UserInfo.DeleteAllOnSubmit(result);
db.SubmitChanges();
1、Syntax Query
var xx=from i in x select i
2、Syntax Method
var db1=db.table.where(r=>r.age>10)
1、本地方法调用形式(LocalMethodCall)
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;
}
}
2、指定类型形式: 使用SELECT和已知类型返回雇员姓名的序列
var q =
from e in db.Employees
select new Name
{
FirstName = e.FirstName,
LastName = e.LastName
};
3、条件形式:生成SQL语句为:case when condition then else
var q =
from p in db.Products
select new
{
p.ProductName,
Availability =
p.UnitsInStock - p.UnitsOnOrder < 0 ? “Out Of Stock” : “In Stock”
};
4、shaped形式(异型类型) 其select操作使用了匿名对象,而这个匿名对象中,其属性也是个匿名对象
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
}
};
5、嵌套类型形式 返回的对象集中的每个对象DiscountedProducts属性中,又包含一个集合。也就是每个对象也是一个集合类。
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
};
6、Distinct形式:筛选字段中不相同的值。用于查询不重复的结果集。生成SQL语句为:SELECT DISTINCT [City] FROM [Customers]
这个是立即执行的,以上都是延后加载的,
var q = (
from c in db.Customers
select c.City )
.Distinct();
syntax Method :
Count/Sum/Min/Max/Avg
Count:返回集合中的元素个数,返回INT类型;不延迟。生成SQL语句为:SELECT COUNT(*) FROM
var q = db.Customers.Count();//1.简单形式:
var q = db.Products.Count(p => !p.Discontinued);//2.带条件形式:
Sum:返回集合中数值类型元素之和,集合应为INT类型集合;不延迟。生成SQL语句为:SELECT SUM(…) FROM
var q = db.Orders.Select(o => o.Freight).Sum();//1.简单形式
var q = db.Products.Sum(p => p.UnitsOnOrder);//2.映射形式:
一般都是可视化创建EDM模型的,
二、手动创建 EDM 手动建立实体类
在项目中添加一个类GuestInfoEntity.cs,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq.Mapping;
namespace DataContexDemo
{
///
/// 手动建立实体类
///
[Table(Name=“tb_GuestInfo”)]
class GuestInfoEntity {
[Column(IsPrimaryKey=true,DbType=“Int NOT NULL IDENTITY”,IsDbGenerated=true,Name=“Id”)]
public int ID { get; set; }
[Column(DbType = “nvarchar(20)”, Name = “Name”)]
public string Name{get;set;}
[Column(DbType = “int”, Name = “Age”)]
public int Age { get; set; }
[Column(DbType = “nvarchar(20)”, Name = “Tel”)]
public string Tel { get; set; }
}
}
编写示例代码,注意需要引入System.Data.Linq.dll:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;/
namespace DataContexDemo
{
class Program {
static void Main(string[] args) {
//2.手动建立实体类
//
//连接字符串
string constring = @“Data Source=.\SQLEXPRESS;AttachDbFilename=E:\Visual Studio 2010\LINQ_to_SQL\LINQ_To_SQL自定义
nce=True”;
DataContext dc = new DataContext(constring); Table tb = dc.GetTable(); var query = tb.AsEnumerable();
foreach (var q in query) {
Console.WriteLine(“{0} {1} {2} {3}”,q.ID,q.Name,q.Age,q.Tel );
}
Console.ReadKey();
}
}
}
3、使用XML映射文件建立实体类
实体类的映射除了使用内联Attribute外,还可以建立一个包含映射信息的XML文件,此文件生成System.Data.Linq.Mapping.XmlMappingSource对象,作为DataContext
这个XML文件只有一个根节点—Database元素,用来映射的数据库信息。Database元素包含一个或多个Table元素,用于映射数据库表的信息,Table元素由一个Type mn元素用来指定列信息,Association元素用来映射数据库关系。 在项目中添加一个XML文件,采用默认名称XMLFile1.xml,内容如下:
这个XML文件包含类全部的映射信息,下面建立映射的类GuestInfoEntity.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQtoSQL建立实体类_XML
{
public class GuestInfoEntity {
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Tel { get; set; }
}
}
编写示例代码,同样需要引入System.Data.Linq.dll:
using System;
using System.Collections.Generic;
using System.Linq; using System.Text;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.IO;//
namespace LINQtoSQL建立实体类_XML {
class Program {
static void Main(string[] args) {
string constring = @“Data Source=.\SQLEXPRESS;AttachDbFilename=E:\Visual Studio 2010\LINQ_to_SQL\LINQ_To_SQL自定义 nce=True”;
XmlMappingSource map = XmlMappingSource.FromXml(File.ReadAllText(“XMLFile1.xml”)); DataContext dc = new DataContext(constring, map); Table tb = dc.GetTable(); var query = tb.AsEnumerable();
foreach (var g in query) {
Console.WriteLine(“{0} {1} {2} {3}”,g.ID,g.Name,g.Age,g.Tel );
}
Console.ReadKey();
}
}
}