- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当 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/
我是一名优秀的程序员,十分优秀!