Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-使用简单查询时速度较慢_C#_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

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

C# 实体框架-使用简单查询时速度较慢,c#,linq,entity-framework,linq-to-entities,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行,直接查询只需不到一秒钟,但当我执行这条语句时,运行它需要

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

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需要几分之一秒的时间来执行。大约有1000行由mm返回,40行由m返回。M大约需要55秒来执行

我假设,尽管
CategoryId
CardId
都链接到其他类(并且都是大数据对象),但数据没有加载,因为没有延迟加载


我真的不明白为什么m要花这么长时间才能执行,我想这是因为缺乏对公平框架的了解。有人可以帮忙吗?

问题是,当您在第一行中调用
ToList
方法时,您将把所有元素都带到内存中,因此请尝试先进行筛选,以避免加载不符合条件的不必要元素,然后调用
ToList
方法:

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

问题是,当您在第一行中调用
ToList
方法时,您将把所有元素都带到内存中,因此请尝试先进行筛选,以避免加载不符合条件的不必要元素,然后调用
ToList
方法:

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

使用探查器查看,调查哪些实际查询被发送到数据库使用探查器查看,调查哪些实际查询被发送到数据库谢谢-虽然这并没有直接解决问题-它让我找到了一个存储在内存中且更大的变量,一旦我将其关闭,它工作得很好。谢谢-虽然这并没有直接解决问题-它让我找到了一个存储在内存中的变量,这个变量要大得多,一旦我把它关掉,它工作得很好。