最近项目中会使用到Linq to Sql这个语法,所以自己就做了下研究。在这里做个简单的入门教程,即使巩固所学的东西也是分享给大家。
废话不多说,直接进入正题:
我使用的是Vs2010 和 SqlServer 2008
首先创建一个“控台应用程序 ”
项目中的"LinqClass.dbml"这个文件就是我们需要的Linq to Sql的文件了,需要自己添加到项目中来。
添加好.dbml文件之后,就是简单的配置操作了。直接在左边的Server Explorer中链接数据库,然后展开Tables,选中需要的操作的“表”、“视图”、“存储过程”拖到旁边的空白窗口中就行了(可以拖多个)
selectCompany()是“存储过程”也可以拖过来哦。
表单、视图、存储过程拖完之后,系统会自动生成所有的操作方法(新增、删除、修改、查询等等),全部都是强类型的哦,操作非常方便。具体代码可以在中查看到。
接下来我们就来看看,C#代码是如何去调用我们刚刚创建的LinqClass的吧,直接上代码。
Linq弱类型的操作(一般很少用到,仅供了解):
//并且必须要添加2个命名空间:
//using System.Data.Linq.Mapping;
//using System.Data.Linq;
[Table(Name = "C_COMPANY")]//对应实际的表名或视图名
public class Company
{
[Column(IsPrimaryKey = true)]
public int COMPANY_ID { get; set; }
[Column(Name = "COMPANY_FULL_NAME")]//指定表中的某一列
public string COMPANY { get; set; }
[Column]//[Column]是必须要要加的
public bool IS_ENABLED { get; set; }
}
static void Main(string[] args)
{
DataContext ctx = new DataContext("server = 10.186.3.21;database =NJT_SYSTEM;uid = sa;pwd=njt_123;");//创建一个Linq to Sql的对象
Table<Company> companyTable = ctx.GetTable<Company>();
ctx.ExecuteCommand("update C_COMPANY set IS_ENABLED={0}", 1);//修改
ctx.ExecuteCommand("delete from C_COMPANY where COMPANY_ID={0}", 6);//删除
ctx.ExecuteCommand("insert into [C_COMPANY](COMPANY_NAME,COMPANY_FULL_NAME,IS_ENABLED,FLOW_START_DEPT,CREATEDBY,UPDATEDBY)" +
"values('CS','测试公司2',0,'9','Administrator','Administrator')");//新增
IEnumerable<Company> companyList = from c in companyTable
select c;
foreach (Company model in companyList)
{
Console.WriteLine(string.Format("{0},{1},{2}", model.COMPANY_ID, model.COMPANY, model.IS_ENABLED));
}
Console.Read();}
Linq强类型的操作(经常会使用的)下面我分别会用强类型、Sql语句、和存储过程 这3种方式来 讲解 新增、修改、删除、查询的操作:
{
LinqClassDataContext linqData = new LinqClassDataContext();
//删除操作
//*强类型的作法*
//直接用表名(系统已经自动帮我们生成了C_COMPANY表的实体类了,实体类的命名和表名是一样的是不是很方便?)
C_COMPANY DeleteCompany = linqData.C_COMPANies.Single(c => c.COMPANY_ID == 13);
//C_COMPANies就是系统帮我们自动成的Linq to Sql的操作类了,因为是强类型的所以可以直接点出方法,并传入要操作的实体类对象
linqData.C_COMPANies.DeleteOnSubmit(DeleteCompany);
//修改操作
//*强类型的作法*
//修改信息的时候直接用实体类的对象点出需要修改的属性并赋值就可以了,代码会在linqData.SubmitChanges();
一步的时候统一去提交修改操作
C_COMPANY UpdateCompany = linqData.C_COMPANies.Where(c => c.COMPANY_ID == 8).First();
UpdateCompany.IS_ENABLED = false;
UpdateCompany.COMPANY_FULL_NAME = "我被修改过了";
//新增操作
//*强类型的作法*
C_COMPANY InsertCompany = new C_COMPANY()
{
COMPANY_NAME = "CS8",
COMPANY_FULL_NAME = "我是新增的公司",
IS_ENABLED=false,
FLOW_START_DEPT=9,
CREATED=DateTime.Now,//虽然数据库里设置了默认值,但是在这里还是要赋值不然会报错。
CREATEDBY = "Administrator",
UPDATED = DateTime.Now,
UPDATEDBY = "Administrator",
};
linqData.C_COMPANies.InsertOnSubmit(InsertCompany);
linqData.SubmitChanges();//这一步千万别漏掉哦,这一步类似于最后的提交操作,没有这一步之前我们做的添、删、改就都不起作用了。
//*****使用T-SQL语句的作法(效率会高,也更加灵活)*****
linqData.ExecuteCommand("update C_COMPANY set IS_ENABLED={0}", 1);
linqData.ExecuteCommand("delete from C_COMPANY where COMPANY_ID={0}", 7);
linqData.ExecuteCommand("insert into [C_COMPANY](COMPANY_NAME,COMPANY_FULL_NAME,IS_ENABLED,FLOW_START_DEPT,CREATEDBY,UPDATEDBY)" +
"values('CS','测试公司3',0,'9','Administrator','Administrator')");
//****************************************************
//普通查询
IEnumerable<VIEW_COMM_COMPANY> Company = from companyList in linqData.VIEW_COMM_COMPANies
where companyList.COMPANY_ID>0
orderby companyList.COMPANY_ID descending
select companyList;
//存储过程查询
var sp_Company = from companyList in linqData.SelectCompany()//调用存储过程就像调用一个方法一样简单。
where companyList.COMPANY_ID > 0
orderby companyList.COMPANY_ID descending
select companyList;
//自定义
var varCompany = from companyList in linqData.VIEW_COMM_COMPANies//如果你不希望查出所有的字段或者希望对某些字段的值进行一下操作,就可以用这个select new{}来显示了
select new
{
公司ID = companyList.COMPANY_ID,
公司编号 = companyList.COMPANY_NAME,
公司名称 = companyList.COMPANY_FULL_NAME+"这里可以做很多逻辑操作,甚至可以调用一个方法哦!",
是否启用 = companyList.IS_ENABLED ? "是" : "否",
所属部门 = companyList.DEPT_NAME
};
foreach (VIEW_COMM_COMPANY model in Company)
{
Console.WriteLine(string.Format("{0},{1},{2},{3},{4}", model.COMPANY_ID, model.COMPANY_NAME, model.COMPANY_FULL_NAME, model.IS_ENABLED, model.DEPT_NAME));
}
Console.WriteLine();
foreach (var model in sp_Company)
{
Console.WriteLine(string.Format("{0},{1},{2},{3},{4}", model.COMPANY_ID, model.COMPANY_NAME, model.COMPANY_FULL_NAME, model.IS_ENABLED, model.DEPT_NAME));
}
Console.WriteLine();
foreach (var model in varCompany)
{
Console.WriteLine(string.Format("{0},{1},{2},{3},{4}", model.公司ID, model.公司编号, model.公司名称, model.是否启用, model.所属部门));
}
Console.Read();
}
最后附上整个Demo:LINQtoSQL的简单Demo.rar