私は現在、自分のDataContextクラスのメソッドとして実装されているLINQクエリを持っています。このメソッドは、ユーザーがWiki/CMS内のページに対して持つ権限を計算します。私がしたいのは、このメソッドをページとユーザーのLINQデータオブジェクトに再配置することです。LINQオブジェクト内からLINQ to SQLクエリを実行できますか?
ただし、このクエリを個々のデータオブジェクトに移動すると、LINQ to SQLの代わりにLINQ to Objectsを使用して実行されます。つまり、実行するたびにデータベースサーバーからいくつかのフルコレクションを取得します。
次は、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を使用して動作するコードの断片です。私はむしろの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のから実行され、それがSQLにLINQとして実行されますが、WikiPage LINQから実行したとき、それはとして実行オブジェクトオブジェクトへのLINQ。ここで私の構文に何かがあるのですか、これは単にLINQでは不可能ですか?
あなたの質問は、どのコードがどの結果を生成しているか少し混乱しています...それぞれを(LINQ to SQLとLINQ to Objects)別々に行うコードを少しずつ明確にすることができますか? –
@Justin Niessner Done ...コードは同じですが、唯一の違いはDataContextクラスかLINQオブジェクトのどちらから実行されるかです。 – AaronSieb
最初の例でthis.WikiはDataContextですか? –