我有一个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”没有任何帮助。
答案 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
关系编辑模型以显示正确的多样性。