Man*_*imo 9 enums expression entity-framework entity-framework-4
我试图将实体框架查询的结果返回到我自己的dto类中,同时映射我的枚举TradeType.
我收到以下错误
指定的值不是'Edm.Int32'类型的实例参数名称:value
知道如何修复或解决方法吗?
谢谢
public IEnumerable<Trade> GetLiveTrades(string routeName)
{
return _entities.Price.Where(p => p.StatusCode.Equals("A") && p.Period.PeriodYear <= DateTime.Now.Year+1 && p.Route.RouteCode.Equals(routeName)).
Select(p => new Trade
{
Volume = (long) (p.Volume ?? 100),
TradeType = (p.PriceTypeCode.Equals("O") ? TradeType.Seller : TradeType.Bidder),
Price = p.Price1,
TenorStartDate = p.Period.PeriodStartDate.Value,
TenorEndDate = p.Period.PeriodStartDate.Value,
TradeId = p.ID
}).ToList();
}
public class Trade
{
public long Volume { get; set; }
public TradeType TradeType { get; set; }
public double Price { get; set; }
public DateTime TenorStartDate { get; set; }
public DateTime TenorEndDate { get; set; }
public Guid TradeId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Ger*_*old 10
来自实体框架预测(Select
)的预测中的枚举是一个已知问题.如果你这样做
_entities.Price.Where(p => p.StatusCode.Equals("A") &&
p.Period.PeriodYear <= DateTime.Now.Year + 1 &&
p.Route.RouteCode.Equals(routeName)).ToList() // ToList !
.Select(p => new Trade ...
Run Code Online (Sandbox Code Playgroud)
投影是由常规的linq-to-objects完成的,这是一项例行工作.
编辑
作为一个迟到的事后,我想补充说,ToList()
当有问题的表有很多列时,只有愚蠢可能是有害的.这意味着将更多数据传输到客户端而不是必要的数据.在这种情况下,进行双重投影会很有用.首先,在查询提供者项目范围内接受类型.然后,在切换到linq-to-objects(AsEnumerable
)项目到最终类型之后:
_entities.Price.Where(p => p.StatusCode.Equals("A") &&
p.Period.PeriodYear <= DateTime.Now.Year + 1 &&
p.Route.RouteCode.Equals(routeName))
.Select(p => new
{
Volume = (long) (p.Volume ?? 100),
PriceTypeCode = p.PriceTypeCode,
Price = p.Price1,
TenorStartDate = p.Period.PeriodStartDate.Value,
TenorEndDate = p.Period.PeriodStartDate.Value,
TradeId = p.ID
})
.AsEnumerable()
.Select(x => new Trade
{
Volume = x.Volume,
TradeType = (x.PriceTypeCode.Equals("O") ? TradeType.Seller : TradeType.Bidder),
Price = x.Price1,
TenorStartDate = x.TenorStartDate,
TenorEndDate = x.TenorEndDate,
TradeId = x.ID
}).
Run Code Online (Sandbox Code Playgroud)
安装.Net 4.5似乎也解决了这个问题(您的项目仍然可以在4.0上).
我在我们的登台服务器上遇到此问题(开发和测试服务器工作正常)并发现它没有安装.Net 4.5.一旦我安装了4.5,问题就会在没有任何代码更改的情况下清除.