走進Linq-Linq to SQL How do I(2)

作者: 橫刀天笑  來源: 博客園  發布時間: 2008-09-23 19:02  閱讀: 8224 次  推薦: 3   原文鏈接   [收藏]  
 

系列文章導航:

走進Linq--Linq橫空出世篇

走進Linq-輝煌的背后

走進Linq-Linq大觀園

不能不說的C#特性-對象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴展方法

不能不說的C#特性-匿名方法和Lambda表達式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產品

不能不說的C#特性-迭代器(下),yield以及流的延遲計算

走進Linq-Linq to Objects(上)基礎篇

走進Linq-Linq to Objects(下)實例篇

走進Linq-Linq to SQL感性認識篇

走進Linq-Linq to SQL How do I(1)

走進Linq-Linq to SQL How do I(2)

走進Linq-Linq to SQL How do I(3)

走進Linq-How do I(4)拾遺補零篇第一節

走進Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進Linq-Linq to SQL源代碼賞析之Provider的初始化

走進Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq

 

本篇是Linq to SQL How do I的第二篇,難度系數100,定位為進階級。

內容

對象之間的關系

 

對象之間的關系

既然是對象-關系映射,各個表之間肯定不是獨立存在的(如果都是獨立存在的,也沒有必要用關系數據庫了),那么就必然涉及到幾個表之間的聯合了。

Linq to SQLSQL語句一樣,支持兩種方式的聯合:

1.       利用where子句,對兩個表進行查找

2.       使用join子句

我們還是用例子來說明吧,現在要對blogsposts進行查詢,傳入一篇文章的id的時候,找出這篇文章相關信息的同時還要找出這篇文章屬于哪個博客,接著上篇的例子,我們首先得給Blog類加上映射:

博客類映射(Blog)

首先獲取PostBlogTable的對象,然后施加操作:

Table<Blog> blogs = dbContext.GetTable<Blog>();
            Table
<Post> posts = dbContext.GetTable<Post>();

var result 
= from blog in blogs
           from post 
in posts
           
where post.BlogId == blog.Id && post.Id == 2
           select new { 
               BlogName 
= blog.Name,
               PostTitle 
= post.Title,
               PostBody 
= post.Body
           };


foreach (var item in result)
    Console.WriteLine(item.BlogName);
下面是Linq to SQL為我們生成的SQL語句,從上面可以看出來是用where做聯結的條件來進行的,這種聯結的方式是不被推薦的,存在于ANSI-82 SQL的標準中

推薦的方式是使用join子句:
Table<Blog> blogs = dbContext.GetTable<Blog>();
            Table
<Post> posts = dbContext.GetTable<Post>();

            var result 
= from blog in blogs
                         join post 
in posts on blog.Id equals post.BlogId
                         
where post.Id == 2
                         select new { 
                            BlogName 
= blog.Name,
                            PostTitle 
= post.Title,
                            PostBody 
= post.Body
                         };


foreach (var item in result)
   Console.WriteLine(item.BlogName);
3
0
 
標簽:LINQ LINQ to SQL
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()