实体框架 - 为什么这个Linq查询会产生多次往返?

时间:2013-10-18 17:06:41

标签: c# linq linq-to-entities query-optimization

我有3个表:ProductCategoryProductCategory,其中ProductCategoryProduct之间多对多关系的连接表}和Category。以下Linq查询(这是Category类中的扩展方法)会导致当前ProductCategory内每个Category记录的往返。为什么是这样?如何改进?另请注意,这是数据库优先EF。

    public IEnumerable<Product> ActiveProducts
    {
        get
        {
            return this.ProductCategories.Where(c => !c.Product.IsDeleted && c.Product.IsActive).OrderBy(c => c.SortOrder).Select(c => c.Product);
        }
    }

2 个答案:

答案 0 :(得分:2)

导航属性不是IQueryable,唉。这就是你得到LINQ-to-Objects查询的原因。

答案 1 :(得分:1)

使用Linq,默认是在可枚举的每次迭代中获取数据。如果要一次获取所有行,请在查询上调用.ToList()。这似乎是更有利的方法。