1

我有以下 LINQ 查询,需要将其转换为 Entity SQL /eSQL):

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

User.Roles 是与 Roles 的 n:m 关系的导航属性,反过来也有 Role.Users 导航属性。模型中没有可用的 User_Roles 或 Roles_User 实体,我无法添加它们。

我也不能在这里使用 LINQ 语句,因为我需要添加 .OrderBy("it." + propertyname) (来自另一个来源,也无法更改),如果构建了 ObjectQuery 则不可能与 linq。

那么如何将其转换为 eSQL 呢?我在哪里可以找到好的 eSQL 示例?到目前为止,我搜索了一整天,并且必须承认 eSQL 参考很糟糕,并且网络上没有任何可用的示例。

4

4 回答 4

1

如果您还没有找到解决方案,这将起作用

SELECT VALUE u FROM YourDataContextEntities.Users AS u WHERE NOT EXISTS(SELECT r FROM u.Roles AS r WHERE r.AnyIntegerProperty < 0)
于 2010-07-25T02:56:40.603 回答
0

我认为动态 linq 库可能是这里的解决方案:

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

您可以使用动态属性名称创建过滤表达式,因此无需进行翻译。

于 2010-03-17T11:30:50.987 回答
0

我会写它像

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

未经测试,但我已经尝试过类似的东西,所以这应该适合你。

于 2010-04-01T03:09:41.163 回答
0

如果不知道用户和角色上可用的具体内容,很难找到答案。但是,鉴于您所说,以下工作是否有效:

return (ObjectQuery<User>) from user in Users
                            where !(from role in dataContext.Roles
                                    where role.AnIntegerProperty < 0
                                    select role.UserId).Contains(user.UserId);
于 2010-04-01T04:22:31.753 回答