.net - 编译查询中的 switch 语句可能吗?

标签 .net linq-to-sql entity-framework compiled-query

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

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

有什么解决办法吗?

最佳答案

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)
        ));

关于.net - 编译查询中的 switch 语句可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2958303/

相关文章:

c# - radiobuttonlist 奇怪的 View

c# - 如何在不选择任意类型的情况下对命名空间进行强类型引用

c# - 向下拉列表框添加新值

c# - EF4 对象状态管理器声称在没有附加条目时附加了多个条目

entity-framework - Entity Framework - 清除子集合

c# - 使用 Install Shield 安装程序在用户计算机上部署时如何使用 c# 应用程序附加 MS Access 数据库文件?

c# - LINQ 查询使用运行程序的机器或托管数据库的服务器的处理能力吗?

linq-to-sql - linq to sql 域上下文对域服务类不可见

linq-to-sql - 将 Linq 到 SQL 代码迁移到 .Net Core

.net - 添加新实体标量时 Entity Framework 4 映射片段错误