我目前有一个 LINQ 查询作为我的 DataContext 类的方法实现。此方法计算用户对 Wiki/CMS 中的页面的权限。我想做的是将此方法重新定位到 Page 和 User LINQ 数据对象。
但是,当我将此查询移动到单个数据对象时,它使用 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 的代码片段。我宁愿在 WikiPage 类上使用此方法,而不是 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 }
);
}
}
从 DataContext 运行 LINQ 查询时,它作为 LINQ to SQL 执行,但从 WikiPage LINQ 对象运行时,它作为 LINQ to Objects 运行。我的语法在这里有问题,还是 LINQ 根本不可能?