В настоящее время у меня есть запрос 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 }
);
}
}
Когда запрос LINQ запускается из DataContext, он выполняется как LINQ to SQL, но при запуске из объекта LINQ WikiPage он выполняется как LINQ to Objects. Что-то не так с моим синтаксисом здесь, или это просто невозможно с LINQ?