LINQ 快速入门教程

本教程旨在帮助初学者快速掌握使用LINQ进行数据库的CRUD(创建、读取、更新、删除)操作。将从内存操作与物理提交的区别开始,逐步深入到每个数据库操作的具体代码实现。

内存操作与物理提交

LINQ技术的核心是实体对象。当数据提交到数据库时,它会首先通过LINQ对象。数据库操作是通过'DataContext'类进行的。由于实体对象是LINQ的基础,所有数据首先发送到这些实体,然后才路由到实际的物理数据库。因此,数据库提交是一个两步过程:第一步是内存操作,最后一步是物理提交。

创建实体类

首先,需要创建一个实体类。以一个客户表为例,包含客户ID、客户代码和客户名称字段。以下是创建实体类的代码示例:

using System; using System.Data.Linq.Mapping; [Table(Name = "Customer")] public class CustomerEntity { private int _CustomerId; private string _CustomerCode; private string _CustomerName; [Column(DbType = "nvarchar(50)")] public string CustomerCode { set { _CustomerCode = value; } get { return _CustomerCode; } } [Column(DbType = "nvarchar(50)")] public string CustomerName { set { _CustomerName = value; } get { return _CustomerName; } } [Column(DbType = "int", IsPrimaryKey = true, IsDbGenerated = true)] public int CustomerId { set { _CustomerId = value; } get { return _CustomerId; } } }

使用LINQ进行创建操作

创建数据上下文:

DataContext objContext = new DataContext(strConnectionString);

设置插入数据:

CustomerEntity objCustomerData = new CustomerEntity(); objCustomerData.CustomerCode = txtCustomerCode.Text; objCustomerData.CustomerName = txtCustomerName.Text;

进行内存更新:

objContext.GetTable<CustomerEntity>().InsertOnSubmit(objCustomerData);

执行物理提交:

objContext.SubmitChanges();

完整的创建LINQ代码:

DataContext objContext = new DataContext(strConnectionString); CustomerEntity objCustomerData = new CustomerEntity(); objCustomerData.CustomerCode = txtCustomerCode.Text; objCustomerData.CustomerName = txtCustomerName.Text; objContext.GetTable<CustomerEntity>().InsertOnSubmit(objCustomerData); objContext.SubmitChanges();

使用LINQ进行更新操作

创建数据上下文:

DataContext objContext = new DataContext(strConnectionString);

选择要更新的LINQ对象:

var MyQuery = from objCustomer in objContext.GetTable<CustomerEntity>() where objCustomer.CustomerId == Convert.ToInt16(txtCustomerId.Text) select objCustomer;

设置新值并更新物理数据库:

CustomerEntity objCustomerData = (CustomerEntity)MyQuery.First<CustomerEntity>(); objCustomerData.CustomerCode = txtCustomerCode.Text; objCustomerData.CustomerName = txtCustomerName.Text; objContext.SubmitChanges();

完整的更新LINQ代码:

DataContext objContext = new DataContext(strConnectionString); var MyQuery = from objCustomer in objContext.GetTable<CustomerEntity>() where objCustomer.CustomerId == Convert.ToInt16(txtCustomerId.Text) select objCustomer; CustomerEntity objCustomerData = (CustomerEntity)MyQuery.First<CustomerEntity>(); objCustomerData.CustomerCode = txtCustomerCode.Text; objCustomerData.CustomerName = txtCustomerName.Text; objContext.SubmitChanges();

使用LINQ进行删除操作

删除操作不需要创建数据上下文和选择LINQ对象,直接调用'DeleteOnSubmit()'方法进行内存删除,然后调用'SubmitChanges()'方法从数据库中删除。

objContext.GetTable<CustomerEntity>().DeleteOnSubmit(objCustomerData); objContext.SubmitChanges();

使用LINQ进行查询操作

查询并读取LINQ对象的值,以下代码示例展示了如何执行LINQ查询并将对象值设置到ASP.NET UI中。

DataContext objContext = new DataContext(strConnectionString); var MyQuery = from objCustomer in objContext.GetTable<CustomerEntity>() where objCustomer.CustomerId == Convert.ToInt16(txtCustomerId.Text) select objCustomer; CustomerEntity objCustomerData = (CustomerEntity)MyQuery.First<CustomerEntity>(); txtCustomerCode.Text = objCustomerData.CustomerCode; txtCustomerName.Text = objCustomerData.CustomerName;
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485