在linq to entities / sql的编译查询中是否可以使用类似switch语句的东西? 例如,当从数据库返回已排序的记录时,我想在一个已编译的查询中使用类似开关的语句对不同的属性进行排序,而不必为您可能需要的每个属性编写2个已编译的查询(升序和降序)排序,即使是简单的可排序网格,最多可以有10个编译查询。
在T-SQL中,使用case语句会很容易,因为我认为大多数数据库都支持这样的构造,所以为什么linq / entity框架不支持它。
对此有何解决方案?
答案 0 :(得分: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)
));