Перечисления в проекциях из проекций Entity Framework (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 ...
проекция выполняется обычным linq-to-objects, что является обычной работой.
EDIT
В качестве поздней запоздалой мысли я хотел бы добавить, что просто тупой 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
}).