实体框架 - 使用简单查询时速度慢

时间:2015-08-22 14:09:12

标签: c# linq entity-framework linq-to-entities

我在实体框架中有一个简单的类,如下所示:

public class Merchandising
{
    public int Id { get; set; }

    public int Index { get; set; }    

    public int CategoryId { get; set; }

    public int? CardId { get; set; }  
}

在数据库中,这有大约1000行,直接查询只需不到一秒钟,但是当我执行此语句时,运行最多需要55秒 - 我觉得这很奇怪。任何人都可以对此有所了解吗?

var mm = a.Merchandisings.ToList();    
var m = mm.Where(f => f.CategoryId == catId).ToList();

catId是一个整数值,mm需要几分之一秒才能执行。 mm返回大约1000行,m返回40行。 M需要大约55秒才能执行。

我假设虽然CategoryIdCardId都链接到其他类(并且是大数据对象),但是没有加载数据,因为没有延迟加载。

我真的不明白为什么执行m需要这么长时间,我想这与公平框架缺乏知识有关。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:5)

问题是当你在第一行调用ToList方法时,你会将所有元素都带到内存中,所以先尝试过滤以避免加载不符合条件的不必要元素,之后调用ToList方法:

var m =  a.Merchandisings.Where(f => f.CategoryId == catId).ToList();