假设我有一个名为Stock的类,它有一个虚拟ICollection价格,这是一组历史价格。
如果您获取股票并且在股票实现后您查询价格但应用过滤器,如mystock.Prices.OrderByDescending(px => px.Date).First(),EF内部加载所有价格然后它适用于所使用的过滤器,因为价格可能是一个大型集合,我真的希望看到EF只加载符合我的标准的价格。基本上在服务器端而不是客户端应用过滤。
是否可以这样做?
由于
答案 0 :(得分:2)
这是可能的,但这种方式只有在你可以假设Prices
真的是EntityCollection
而不是其他一些也恰好实现ICollection
的类时才有效。我不确定在所有支持的EF场景中是否都是这样。要使用的函数是EntityCollection
的{{3}}函数。
((EntityCollection<Price>)stock.Prices).CreateSourceQuery().OrderByDescending(price => price.Date).First();
如果这对您不起作用,另一种可能是回到上下文,并从那里查询:
(from price in context.Prices
where price.StockId == stockId
orderby price.Date descending
select price).First();