我在LINQ查詢上使用OrderBy擴展方法時遇到了一些問題,當它在枚舉類型上運行時。我使用Visual Studio創建了一個常規的DataContext,只需將所有內容拖放到設計器上即可。然後我創建了獨立的實體模型,它們只是POCO的,而且我使用了一個存儲庫模式從我的數據庫中獲取數據並將它們映射到我自己的實體模型中(或者說,我有一個存儲庫模式,可以構建和IQueryable這將做到這一切)。Linq To SQL OrderBy,使用枚舉時發出的問題
一切正常,除非我嘗試在從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是由用戶代碼未處理 消息=「參數'值'是錯誤的類型,預期'IQMedia.Models.CampaignType'。實際'System.Int16'。「 源= 「將System.Data.Linq」 堆棧跟蹤: 粘彈性阻尼器System.Data.Linq.SqlClient.SqlOrderExpression.set_Expression(SqlExpression值) 粘彈性阻尼器System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect(一個SQLSelect選擇) VED System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode節點) 粘彈性阻尼器System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitIncludeScope(SqlIncludeScope範圍) ...
(抱歉在那裏丹麥,ved = by/at)。
我已經嘗試了在orderBy表達式中縮短狀態以縮短狀態,但是這並沒有幫助,同樣如果我將它轉換爲實際的枚舉類型也是如此。
任何幫助解決這個問題,非常感謝!