Entity Framework (3.5): Как перевести определенный запрос LINQ в eSQL? - PullRequest
1 голос
/ 17 марта 2010

У меня есть следующий запрос 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 ]

1 голос
/ 25 июля 2010

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

SELECT VALUE u FROM YourDataContextEntities.Users AS u WHERE NOT EXISTS(SELECT r FROM u.Roles AS r WHERE r.AnyIntegerProperty < 0)
0 голосов
/ 01 апреля 2010

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

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

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

0 голосов
/ 01 апреля 2010

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

return (ObjectQuery<User>) from user in Users
                            where !(from role in dataContext.Roles
                                    where role.AnIntegerProperty < 0
                                    select role.UserId).Contains(user.UserId);
0 голосов
/ 17 марта 2010

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

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

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

...