用linqPad幫助你快速學習LINQ


在這里我向大家推薦的一個具是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
         }
   )

就講到這里大家可以多學習一下這個工具

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM