📅  最后修改于: 2023-12-03 15:17:19.788000             🧑  作者: Mango
LINQ是Language Integrated Query的缩写,它是一个.NET Framework 3.0及以上版本中的组件,可用于在C#或VB.NET中编写查询。LINQ to SQL是一种LINQ提供程序,它可以将SQL Server数据库中的表映射到.NET对象上,并提供了一种方便的方式来执行CRUD(Create Retrieve Update Delete)操作。
在使用LINQ to SQL进行CRUD操作之前,需要先创建一个LINQ to SQL数据上下文,并在该上下文中定义要映射的表信息。以下是创建LINQ to SQL数据上下文的代码片段:
public class MyDataContext : DataContext
{
public MyDataContext() : base("Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=True")
{
}
public Table<Employee> Employees
{
get
{
return this.GetTable<Employee>();
}
}
// 其他表定义...
}
在上面的代码中,我们定义了一个名为"MyDataContext"的数据上下文,并且声明了一个名为"Employees"的表,该表将映射到名为"Employee"的SQL Server表。在使用LINQ to SQL进行CRUD操作时,我们可以使用以下代码片段:
MyDataContext context = new MyDataContext();
Employee employee = new Employee();
employee.FirstName = "John";
employee.LastName = "Doe";
employee.JobTitle = "Developer";
employee.Salary = 5000;
context.Employees.InsertOnSubmit(employee);
context.SubmitChanges();
在上面的代码中,我们创建了一个名为"employee"的新Employee对象,并将其插入到上下文的"Employees"表中。最后,使用"SubmitChanges"方法将更改提交到数据库中。
我们可以使用以下代码片段来检索匹配指定条件的Employee对象:
MyDataContext context = new MyDataContext();
var employees = from e in context.Employees
where e.JobTitle == "Developer"
select e;
在上面的代码中,我们查询出了所有"JobTitle"等于"Developer"的Employee对象。
使用以下代码片段可以更新Employee对象:
MyDataContext context = new MyDataContext();
Employee employee = (from e in context.Employees
where e.EmployeeID == 1
select e).SingleOrDefault();
if (employee != null)
{
employee.FirstName = "Jane";
employee.LastName = "Doe";
employee.JobTitle = "Manager";
context.SubmitChanges();
}
在上面的代码中,我们查询出"name"为"John"和"lastName"为"Doe"的Employee对象,然后更新它的一些属性,并使用"SubmitChanges"方法将更改提交到数据库中。
使用以下代码片段来删除Employee对象:
MyDataContext context = new MyDataContext();
Employee employee = (from e in context.Employees
where e.EmployeeID == 1
select e).SingleOrDefault();
if (employee != null)
{
context.Employees.DeleteOnSubmit(employee);
context.SubmitChanges();
}
在上面的代码中,我们查询出ID为1的Employee对象,并将其删除。最后,使用"SubmitChanges"方法将更改提交到数据库中。
在一些情况下,我们需要对LINQ to SQL的CRUD操作进行扩展。例如,我们想要实现一些自定义操作,比如在执行插入操作时自动设置Employee对象的"CreatedAt"属性。
对于这类情况,我们可以通过扩展"DataContext"和"Table"类来实现自定义操作。以下是一个扩展DataContext类的代码片段:
public partial class MyDataContext
{
partial void InsertEmployee(Employee instance)
{
instance.CreatedAt = DateTime.Now;
this.ExecuteDynamicInsert(instance);
}
}
在上面的代码中,我们通过部分类定义了一个名为"MyDataContext"的数据上下文并重载了InsertEmployee方法。在该方法中,我们设置了一个名为"CreatedAt"的Employee属性,并使用"ExecuteDynamicInsert"方法插入了employee对象。
注意,我们还必须从设计时更改DataContext的访问修饰符,以便我们可以访问生成代码中的部分类。要执行此操作,请打开"LinqToSql"设计器并选择"View Code"菜单选项。以下是一个扩展Table类的代码片段:
public partial class Employee
{
public void SetSalary(decimal salary, bool saveChanges)
{
this.Salary = salary;
if (saveChanges)
{
MyDataContext context = new MyDataContext();
context.SubmitChanges();
}
}
}
在上面的代码中,我们通过重载Employee类来添加设置Salary属性的自定义方法。此方法还可以选择性地将更改提交到数据库中。
LINQ to SQL是一种方便的方式,可在C#或VB.NET中执行基本的CRUD操作。此外,我们可以通过扩展DataContext和Table类来实现自定义操作。总之,LINQ to SQL是.NET开发人员必须掌握的技能之一。