我目前有一个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