实体框架(3.5):如何将某个LINQ查询转换为eSQL?

时间:2010-03-17 09:54:42

标签: entity-framework linq-to-entities entity-sql

我有以下需要转换为Entity SQL / eSQL的LINQ查询:

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(“它。”+ propertyname)(来自其他来源,也不能改变它)以后哪个是不可能的,如果ObjectQuery是用linq构建的。

那我该怎么把它翻译成eSQL呢?我在哪里可以找到好的eSQL样本?我一直搜索了一整天,并且必须承认eSQL引用很糟糕,而且网络上没有任何可用的示例。

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

我会写一些类似

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

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

答案 3 :(得分:0)

如果不知道用户和角色的具体内容,很难找到答案。但是,鉴于你所说的,将进行以下工作:

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