EF 运行 多个查询 - 如何更改为使用一个查询?

EF Running multiple queries - How can I change to use one query?

我正在查看我网站上每个页面加载 运行 的 SQL 查询量。

下面的方法是 运行ning 1 SQL 查询 Promotion table.

内的 PER entry
public IEnumerable<Promotion> GetPromotionsForStore(Store store)
{
    return Get().Where(p => p.ValidForStores.Select(s => s.Id).Contains(store.Id));
}

'ValidForStores' 是一个链接 table,它包含 'Promotion_Id' 和 'Store_Id'。 Get() 基本上最终返回 IDbSet<Promotion>

如果我把它写成一个普通的 SQL 查询,我可以带回所有的促销活动,同时仍然进行商店检查,但所有这些都只需要一个查询,但是在这种情况下是 EF 运行s以下查询多次。

SELECT 
[Extent2].[Id] AS [Id], 
[Extent2].[StoreName] AS [StoreName], 
[Extent2].[IsDefault] AS [IsDefault], 
[Extent2].[ThemeName] AS [ThemeName], 
[Extent2].[AdminStore] AS [AdminStore], 
[Extent2].[UrlAffix] AS [UrlAffix], 
[Extent2].[WebsiteId] AS [WebsiteId], 
[Extent2].[CategoryId] AS [CategoryId]
FROM  [dbo].[PromotionStore] AS [Extent1]
INNER JOIN [dbo].[Store] AS [Extent2] ON [Extent1].[Store_Id] = [Extent2].[Id]
WHERE [Extent1].[Promotion_Id] = 41

任何人都可以提出更改,这意味着使用单个查询还是我对 EF 的期望过高?

很可能您的 Get() 方法正在返回 IEnumerable<Promotion>。为了执行单个查询,将其替换为 IQueryable<Promotion> 等效项,例如

return context.Promotions.Where(...);