4

是否有可能在编译查询中使用类似 switch 语句的 linq to entity/sql?例如,当从数据库返回排序后的记录时,我想在一个编译查询中使用类似 switch 的语句来对不同的属性进行排序,而不是必须为您可能想要的每个属性编写 2 个编译查询(升序和降序) sort on,对于一个简单的可排序网格,最多可以编译 10 个查询。

在 T-SQL 中,使用 case 语句很容易,因为我想象大多数数据库都支持这样的构造,那么为什么 linq/entity 框架不支持它。

有什么解决办法吗?

4

1 回答 1

3

正如kyndigs在他的评论中提到的那样,唯一的解决方案是使用? :三级运算符伪造一个 switch 语句:

        internal static readonly Func<MyEntities, long, MessageSortField, int, int, IQueryable<Model.Message>> MessagesPagedSortedAscQuery =
        CompiledQuery.Compile((MyEntities db, long folderId, MessageSortField sortField, int skip, int take) =>
        (
            sortField == MessageSortField.Date ? db.Messages.Where(e => e.FolderId == folderId).OrderBy(m => m.Date).Skip(skip).Take(take) :
            sortField == MessageSortField.Subject ? db.Messages.Where(e => e.FolderId == folderId).OrderBy(m => m.Subject).Skip(skip).Take(take) :
            sortField == MessageSortField.From ? db.Messages.Where(e => e.FolderId == folderId).OrderBy(m => m.From).Skip(skip).Take(take) :
            db.Messages.Where(e => e.FolderId == folderId).Skip(skip).Take(take)
        ));
于 2010-11-01T13:19:09.293 回答