2009-07-29 143 views
0

我目前有一個LINQ查詢作爲我的DataContext類的一個方法實現。此方法計算用戶對Wiki/CMS中頁面的權限。我想要做的是將此方法重新定位到頁面和用戶LINQ數據對象。我可以從LINQ對象內執行LINQ to SQL查詢嗎?

但是,當我將此查詢移動到單個數據對象時,它將使用LINQ to Objects而不是LINQ to SQL執行。這意味着每次執行時都會從數據庫服務器中提取幾個完整的集合。

以下是使用LINQ to Objects的代碼片段。我想要使​​用LINQ to SQL:

partial class WikiPage 
{ 
    public void GetUserPermissions(Guid? userId) { 
     var usersPlusAnon = 
      (
       from user in this.Wiki.WikiWikiUsers 
       select new { user.WikiId, WikiUserId = (Guid?)user.WikiUserId } 
      ).Union(
       from wiki in new Wiki[]{this.Wiki} 
       select new { wiki.WikiId, WikiUserId = (Guid?)null } 
      ); 
    } 
} 

這是使用LINQ to SQL工作的代碼片段。我寧願對wiki頁面類比的DataContext這個方法:

partial class WikiDataContext 
{ 
    public void GetUserPermissions(Guid? userId) { 
     var usersPlusAnon = 
      (
       from user in this.WikiTomeUsers 
       join wikiUser in this.WikiWikiTomeUsers on user.WikiTomeUserId equals wikiUser.WikiTomeUserId into tmp_wikiUser 
       from wikiUser in tmp_wikiUser.DefaultIfEmpty() 
       select new { WikiId = wikiUser.WikiId, WikiTomeUserId = (Guid?)wikiUser.WikiTomeUserId } 
      ) 
      .Union(
       from wiki in this.Wikis 
       select new { WikiId = wiki.WikiId, WikiTomeUserId = (Guid?)null } 
      ); 
    } 
} 

當LINQ查詢從DataContext的運行,它執行的LINQ to SQL的,但是從wiki頁面LINQ運行對象時,它運行的LINQ到對象。我的語法在這裏有什麼用處,或者這對LINQ來說是不可能的?

+0

你的問題是有點混淆,哪些代碼產生的結果...你可以給我們的代碼,每個(LINQ到SQL與LINQ到對象)單獨使它更清晰一點嗎? – 2009-07-29 23:21:25

+0

@Justin Niessner完成...代碼是一樣的,唯一的區別是它是從DataContext類還是LINQ對象運行。 – AaronSieb 2009-07-29 23:26:42

回答

1

從兩組代碼中獲得不同行爲的原因是因爲您正在使用'this'關鍵字。

將代碼編寫爲數據上下文的一部分時,它使用DataContext對象中的LINQ to SQL類(因爲'this'關鍵字指向DataContext)。

如果您希望DataContext以外的代碼使用LINQ to SQL,則必須將對「this」的引用更改爲WikiDataContext的實例。然後它應該使用LINQ to SQL將數據從數據庫中而不是LINQ轉移到對象。