假设我有一个名为 Stock 的类,它有一个虚拟的 ICollection 价格,它是一组历史价格。
如果您获取股票并在股票具体化后查询价格,但应用 mystock.Prices.OrderByDescending(px => px.Date).First() 之类的过滤器,EF 在内部加载所有价格,然后应用过滤器使用,因为价格可能是一个很大的集合,我真的很想看到 EF 只加载符合我的 where 标准的价格。基本上在服务器端而不是客户端应用过滤。
是否有可能做到这一点?
谢谢
假设我有一个名为 Stock 的类,它有一个虚拟的 ICollection 价格,它是一组历史价格。
如果您获取股票并在股票具体化后查询价格,但应用 mystock.Prices.OrderByDescending(px => px.Date).First() 之类的过滤器,EF 在内部加载所有价格,然后应用过滤器使用,因为价格可能是一个很大的集合,我真的很想看到 EF 只加载符合我的 where 标准的价格。基本上在服务器端而不是客户端应用过滤。
是否有可能做到这一点?
谢谢
这是可能的,但这种方式只有在你可以假设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();