2

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

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

是否有可能做到这一点?

谢谢

4

1 回答 1

2

这是可能的,但这种方式只有在你可以假设Prices是真的是一个EntityCollection而不是其他一些也碰巧实现的类时才有效ICollection。我不确定这是否在所有受支持的 EF 场景中都是正确的。要使用的函数是EntityCollection'sCreateSourceQuery函数。

((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();
于 2012-04-23T22:21:46.490 回答