我在LINQ查询上运行枚举类型时遇到一些使用OrderBy扩展方法的问题.我已经使用visual studio创建了一个常规的DataContext,只需将所有内容拖放到设计器上即可.然后我创建了单独的实体模型,它们只是POCO,我使用了一个存储库模式从我的数据库中获取数据并将它们映射到我自己的实体模型中(或者更确切地说,我有一个存储库模式,它构建和IQueryable那就完成了这一切.
一切正常,除非我尝试在我已经从short/smallint映射到枚举的属性上应用OrderBy(在存储库之外).
以下是相关的代码位:
public class Campaign { public long Id { get; set; } public string Name { get; set; } .... public CampaignStatus Status { get; set; } ... } public enum CampaignStatus : short { Active, Inactive, Todo, Hidden } public class SqlCampaignRepository : ICampaignRepository { ... public IQueryableCampaigns() { DataContext db = new DataContext(); return from c in db.Campaigns select new Campaign { Id = c.Id, Name = c.Name, ... Status = (CampaignStatus)c.Status, ... }; } }
其他地方
SqlCampaignRepository rep = new SqlCampaignRepository(); var query = rep.Campaigns().OrderBy(c => c.Status);
这触发了以下异常信息:System.ArgumentException是由用户代码消息未处理="参数'值’是错误的类型应为'IQMedia.Models.CampaignType’实际'System.Int16’.".源= "将System.Data.Linq" 堆栈跟踪:粘弹性阻尼器粘弹性阻尼器System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect System.Data.Linq.SqlClient.SqlOrderExpression.set_Expression(SqlExpression值)(一个SQLSelect选择)粘弹性阻尼器System.Data. Linq.SqlClient.SqlVisitor.Visit(SqlNode节点)粘弹性阻尼器System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitIncludeScope(SqlIncludeScope范围)...
(对不起那里的丹麦语,ved = by/at).
我曾尝试类型转换的状态到短的排序依据的表达,但这并不能帮助它,同样的,如果我将它转换为实际的枚举类型为好.
任何帮助解决这个问题非常感谢!