【问题标题】:How to sort with a CASE statement in an EntityDataSource?如何使用 EntityDataSource 中的 CASE 语句进行排序?
【发布时间】:2012-01-06 22:50:20
【问题描述】:

我在我的 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 行,第 11 列 21.

如何让这种类型的排序在我的EntityDataSource 中工作?

【问题讨论】:

    标签: asp.net sql sql-server entity-framework entitydatasource


    【解决方案1】:

    我今天也在尝试同样的事情。我在 Entity SQL Reference 站点上发现您显然必须使用 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 Entity SQL Reference: 'CASE'

    【讨论】:

    • A-MA-ZING!你为我节省了很多时间!万分感谢!!!如果我有一些啤酒,你会得到它!
    • @Kees C. Bakker:太好了,我的问候你找到了解决方案!为什么 EF 无法在 ORDER BY 中处理 CASE 对我来说很有趣
    • 如何在Select中使用CASE
    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 2019-05-07
    • 2021-05-28
    • 2012-05-25
    相关资源
    最近更新 更多