在這里我向大家推薦的一個具是LinqPad有了這個工具並熟練使用就可以很快學習並掌握linq
linqPad下載地址:http://www.linqpad.net/
它也自帶了很多例子方便大家查詢,linqPad支持object ,xml,sql , to linq這里我只講一下sql to linq
好多同學不知道怎么用linq完成 left join ,inner join 等,這里我就用這個工具給大家實現一下
linqpad 會給我們同時生成lambda表達式,sql和IL 我一般情況下有linq的lambda不會的時候,就用Linqpad來調試得到結果
打開它的主頁面看一下,點AddConnection 就可以添加數據庫連接
先在數據庫里建一個庫MyDataDemo兩個表Classes和Student

create database MyDataDemo go use MyDataDemo go drop table Student create table Classes ( class_Id int , class_Name varchar(100) ) create table Student ( st_Id int, st_Name varchar(100), class_Id int ) insert into Classes values(1,'OneC') insert into Classes values(2,'TwoC') insert into Classes values(3,'ThreeC') insert into Student values(1,'xiaoMing',1) insert into Student values(2,'zhangqiang',2) insert into Student values(3,'lihong',3) insert into Student values(4,'wangsi',1) insert into Student values(5,'zhaoWu',1) insert into Student values(6,'WangLiu',2)
我們在linqPad的query標簽里把Language 選擇為c# Expression ,把Connection 選擇數據MyDataDemo 就是我們上邊建好的數據庫如圖
先看一下Left Join
我們在面版里輸入最基本的Linq表達式 點執行或者F5
from stu in Students join cla in Classes on stu.Class_Id equals cla.Class_Id into MyJoin from grp in MyJoin.DefaultIfEmpty() select new {ClassId=grp.Class_Id,Class_Name=grp.Class_Name,st_Name =stu.St_Name}
看一下linqPad給我們顯示的結果
sql結果 是判斷我們的Linq是不是正確的
看它是left outer join(left join 是Left outer join 和簡寫) 證明我們是正確的
SELECT [t1].[class_Id] AS [ClassId], [t1].[class_Name] AS [Class_Name], [t0].[st_Name] FROM [Student] AS [t0] LEFT OUTER JOIN [Classes] AS [t1] ON [t0].[class_Id] = [t1].[class_Id]
最強的是它還給我們生成lambda表達式
Students .GroupJoin ( Classes, stu => stu.Class_Id, cla => cla.Class_Id, (stu, MyJoin) => new { stu = stu, MyJoin = MyJoin } ) .SelectMany ( temp0 => temp0.MyJoin.DefaultIfEmpty (), (temp0, grp) => new { ClassId = grp.Class_Id, Class_Name = grp.Class_Name, st_Name = temp0.stu.St_Name } )
再看一下inner join
//inner join from stu in Students join cla in Classes on stu.Class_Id equals cla.Class_Id select new {ClassId=cla.Class_Id,Class_Name=cla.Class_Name,st_Name =stu.St_Name}
看一下sql結果我們是不是正確的
SELECT [t1].[class_Id] AS [ClassId], [t1].[class_Name] AS [Class_Name], [t0].[st_Name] FROM [Student] AS [t0] INNER JOIN [Classes] AS [t1] ON [t0].[class_Id] = [t1].[class_Id]
正確
再看一下lambda表達式
Students .Join ( Classes, stu => stu.Class_Id, cla => cla.Class_Id, (stu, cla) => new { ClassId = cla.Class_Id, Class_Name = cla.Class_Name, st_Name = stu.St_Name } )
就講到這里大家可以多學習一下這個工具