实体框架延迟加载和ICollection

时间:2012-04-23 21:24:36

标签: entity-framework

假设我有一个名为Stock的类,它有一个虚拟ICollection价格,这是一组历史价格。

如果您获取股票并且在股票实现后您查询价格但应用过滤器,如mystock.Prices.OrderByDescending(px => px.Date).First(),EF内部加载所有价格然后它适用于所使用的过滤器,因为价格可能是一个大型集合,我真的希望看到EF只加载符合我的标准的价格。基本上在服务器端而不是客户端应用过滤。

是否可以这样做?

由于

1 个答案:

答案 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();