Entity Framework (3.5): Как перевести определенный запрос LINQ в eSQL?

У меня есть следующий запрос LINQ, который мне нужно перевести на Entity SQL / eSQL):

return (ObjectQuery<User>) from user in Users
   where !user.Roles.Any(r => r.AnIntegerProperty < 0)
   select user;

User.Roles - это свойство навигации в отношении n:m к ролям, а также есть свойство навигации Role.Users в обратном направлении. В модели нет доступных User_Roles или Roles_User Entities, и я не могу их добавить.

Я также не могу использовать оператор LINQ здесь, потому что мне нужно добавить.OrderBy("it." + Имя свойства) (исходит из другого источника, тоже не могу его изменить), что невозможно, если ObjectQuery собирается с linq.

Так как мне перевести это на eSQL? И где я могу найти хорошие образцы eSQL? Я искал целый день до сих пор и должен признать, что ссылки на eSQL паршивые и в Интернете нет примеров, которые можно было бы использовать.

4 ответа

Решение

Если вы не нашли решение, это будет работать

SELECT VALUE u FROM YourDataContextEntities.Users AS u WHERE NOT EXISTS(SELECT r FROM u.Roles AS r WHERE r.AnyIntegerProperty < 0)

Я написал бы что-то вроде

contexte.Users.Where("NOT EXISTS (SELECT VALUE r FROM it.Roles AS r WHERE  r.AnIntegerProperty < 0)")

не проверял, но я уже пробовал нечто подобное, так что это должно работать для вас.

Трудно найти ответ, не зная специфики того, что доступно в разделе "Пользователи и роли". Однако, учитывая то, что вы сказали, будет работать следующее:

return (ObjectQuery<User>) from user in Users
                            where !(from role in dataContext.Roles
                                    where role.AnIntegerProperty < 0
                                    select role.UserId).Contains(user.UserId);

Я думаю, что динамическая библиотека linq может быть решением здесь:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

Вы можете создавать фильтрующие выражения, используя динамические имена свойств, поэтому нет необходимости делать переводы.

Другие вопросы по тегам