1

我有一个 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" 没有帮助。


4

2 回答 2

2

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

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

于 2013-01-30T11:30:36.460 回答
0

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

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

于 2013-01-29T08:08:45.080 回答