我在实体框架中有一个简单的类,如下所示:
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秒才能执行。
我假设虽然CategoryId
和CardId
都链接到其他类(并且是大数据对象),但是没有加载数据,因为没有延迟加载。
我真的不明白为什么执行m需要这么长时间,我想这与公平框架缺乏知识有关。有人可以帮忙吗?
答案 0 :(得分:5)
问题是当你在第一行调用ToList
方法时,你会将所有元素都带到内存中,所以先尝试过滤以避免加载不符合条件的不必要元素,之后调用ToList
方法:
var m = a.Merchandisings.Where(f => f.CategoryId == catId).ToList();