現在、DataContextクラスのメソッドとしてLINQクエリを実装しています。このメソッドは、Wiki/CMS内のページに対してユーザーが持つ権限を計算します。私がやりたいのは、このメソッドをPageおよびUserLINQデータオブジェクトに再配置することです。
ただし、このクエリを個々のデータオブジェクトに移動すると、LINQtoSQLではなくLINQtoObjectsを使用して実行されます。これは、実行するたびにデータベースサーバーからいくつかの完全なコレクションを取得することを意味します。
これは、LINQtoObjectsを使用するコードのフラグメントです。LINQtoSQLを使用するには次のようにします。
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 }
);
}
}
これは、LINQtoSQLを使用して機能するコードのフラグメントです。DataContextよりもWikiPageクラスにこのメソッドが必要です。
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として実行されますが、WikiPage LINQオブジェクトから実行すると、LINQtoObjectsとして実行されます。ここでの私の構文に何か問題がありますか、それともこれはLINQでは不可能ですか?