具有EntityDataSource OrderBy属性的OrderBy子实体

时间:2013-01-29 07:46:42

标签: asp.net linq-to-sql entity-framework-4

我有一个EntityDataSource,用于选择具有roleID排序的某些角色的所有用户实体。 (我希望显示按角色增长的用户,因此订单部分很重要)。

以下代码:

<asp:EntityDataSource ID="UserDataSource" runat="server" ConnectionString="name=MyEntities" 
    DefaultContainerName="MyEntities" EnableFlattening="False"
    EntitySetName="Users" Where="EXISTS(SELECT VALUE u FROM it.UserRoles AS u)" OrderBy="it.UserRoles.RoleId">
</asp:EntityDataSource>

产生以下错误:

  

'RoleId'不是'Transient.collection [MyModel.UserRole(Nullable = True,DefaultValue =)]'的成员。要提取集合元素的属性,请使用子查询迭代集合。

添加Include =“UserRoles”没有任何帮助。


2 个答案:

答案 0 :(得分:2)

行。我找到了正确的语法。这是:

OrderBy="ANYELEMENT(SELECT VALUE SqlServer.MIN(r.RoleId) From it.UserRoles AS r)"

答案 1 :(得分:0)

问题是单个用户可能有多个UserRole。因此,您无法使用角色ID来订购用户组 - 没有与给定用户关联的单个角色ID。这是错误消息说 - it.UserRoles是一个集合,没有角色ID属性。该属性存在于集合的元素(UserRole)上。

我不确定您的订购逻辑(考虑到用户可以有多个角色),但假设用户只能拥有一个角色,您可以使用it.UserRoles.First().RoleId等表达式来获取订购。更好的方法是使用User - UserRole关系编辑模型以显示正确的多样性。