gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:48:14 26 4
gpt4 key购买 nike

当 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com