我目前有一個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來說是不可能的?
你的問題是有點混淆,哪些代碼產生的結果...你可以給我們的代碼,每個(LINQ到SQL與LINQ到對象)單獨使它更清晰一點嗎? – 2009-07-29 23:21:25
@Justin Niessner完成...代碼是一樣的,唯一的區別是它是從DataContext類還是LINQ對象運行。 – AaronSieb 2009-07-29 23:26:42