最近項目中會使用到Linq to Sql這個語法,所以自己就做了下研究。在這里做個簡單的入門教程,即使鞏固所學的東西也是分享給大家。
廢話不多說,直接進入正題:
我使用的是Vs2010 和 SqlServer 2008
首先創建一個“控台應用程序 ”
項目中的"LinqClass.dbml"這個文件就是我們需要的Linq to Sql的文件了,需要自己添加到項目中來。
添加好.dbml文件之后,就是簡單的配置操作了。直接在左邊的Server Explorer中鏈接數據庫,然后展開Tables,選中需要的操作的“表”、“視圖”、“存儲過程”拖到旁邊的空白窗口中就行了(可以拖多個)

表單、視圖、存儲過程拖完之后,系統會自動生成所有的操作方法(新增、刪除、修改、查詢等等),全部都是強類型的哦,操作非常方便。具體代碼可以在中查看到。
接下來我們就來看看,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