c# - Linq To SQL OrderBy,使用枚举时出现问题

标签 c# linq-to-sql enums

当 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 IQueryable<Campaign> Campaigns()
    {
        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 未被用户代码处理 Message="参数 'value' 的类型错误。应为 'IQMedia.Models.CampaignType'。实际为 'System.Int16'。" Source="System.Data.Linq" 堆栈跟踪: ved System.Data.Linq.SqlClient.SqlOrderExpression.set_Expression(SqlExpression 值) ved System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect(SqlSelect 选择) ved System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode 节点) ved System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitIncludeScope(SqlIncludeScope 作用域) ...

(抱歉里面的丹麦语,ved = by/at)。

我已经尝试在 orderBy 表达式中将 Status 类型转换为 short,但这无济于事,如果我也将其转换为实际的枚举类型也是如此。

非常感谢任何解决此问题的帮助!

最佳答案

您能否通过设计器直接在 DataContext 中指定类型 CampaignStatus?这样,值会自动映射到 enum

关于c# - Linq To SQL OrderBy,使用枚举时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/378153/

相关文章:

c# - GetHashCodes - 如何以及何时使用它?

c# - 将 usings 放在命名空间的内部或外部

entity-framework - 如何告诉 EF4 加载特定的相关对象?

ruby-on-rails - 具有枚举和关联的工厂女孩

c++ - 类名和枚举值之间的冲突 : resolvable without namespaces?

c# - 如何判断何时在 TextBox 中按下了回车键?

linq-to-sql - Linq 中的 ChangeConflictException 到 Sql 更新

c# - 是否可以通过 LINQ to SQL 使用/访问标量函数?

java - 如何强制属性等于常量值之一(在 Java 中)?

c# - 是否可以使用库中的类型创建 DataContract?