我在我的EntityDataSource中使用CASE
语句来进行自定义排序。考虑下面的代码:
<asp:EntityDataSource ID="myEntityDataSource" runat="server"
ConnectionString="name=MySQLEntities1"
DefaultContainerName="MySQLEntities1"
EnableFlattening="False"
EntitySetName="Persons"
EntityTypeFilter="Persons"
OrderBy="it.[Pack],
CASE it.[Type]
WHEN 'MAN' THEN 1
WHEN 'VROUW' THEN 2
WHEN 'KIND' THEN 3
END,
it.[BirthDate] ASC" />
在T-SQL中,这将是一种完美的正常排序方式,但在EntityDataSource
中使用它会抛出以下异常:
查询语法无效。在标识符"it"附近,第11行,列21 .
如何让这种类型的排序工作在我的EntityDataSource
?
我今天也在做同样的事情。我在实体SQL参考站点上发现,显然必须使用CASE WHEN
而不能使用CASE [value] WHEN
。这种方法虽然不像在T-SQL中那样,但对我来说确实有效。所以你的代码应该是这样的:
<asp:EntityDataSource ID="myEntityDataSource" runat="server"
ConnectionString="name=MySQLEntities1"
DefaultContainerName="MySQLEntities1"
EnableFlattening="False"
EntitySetName="Persons"
EntityTypeFilter="Persons"
OrderBy="it.[Pack],
CASE
WHEN it.[Type] = 'MAN' THEN 1
WHEN it.[Type] = 'VROUW' THEN 2
WHEN it.[Type] = 'KIND' THEN 3 END, it.[BirthDate] ASC" />
MSDN实体SQL参考:'CASE'