gpt4 book ai didi

c# - LINQ到实体- Entity Framework

转载 作者:太空宇宙 更新时间:2023-11-03 18:09:58 26 4
gpt4 key购买 nike

我希望更好地了解何时应该使用LINQ to Entities在IEnumerable上使用IQueryable

使用真正基本的数据库调用,IQueryable更快,但是何时需要考虑使用IEnumerable代替它呢?

相对于IEnumerable最优的IQueryable在哪里?

最佳答案

基本上,IQueryable由查询提供程序(例如数据库)执行,并且某些操作不能或不应该由数据库执行。例如,如果您要使用从数据库中获得的值来调用C#函数(在此示例中,正确地将名称大写),则可以尝试类似的操作;例如:

db.Users.Select(x => Capitalize(x.Name)) // Tries to make the db call Capitalize.
.ToList();


由于 Select是在IQueryable上执行的,并且基础数据库不了解您的 Capitalize函数,因此查询将失败。相反,您可以做的是从数据库中获取正确的数据,并将IQueryable转换为IEnumerable(这基本上是一种遍历内存中集合的方式),以在本地内存中完成其余操作,如下所示:

db.Users.Select(x => x.Name)             // Gets only the name from the database
.AsEnumerable() // Do the rest of the operations in memory
.Select(x => Capitalize(x)) // Capitalize in memory
.ToList();


从EF的角度来看,关于IQueryable和IEnumerable的性能,最重要的是,您应始终尝试使用IQueryable过滤数据,以获取尽可能少的数据以转换为IEnumerable。 AsEnumerable调用的主要作用是告诉数据库“立即过滤时将数据提供给我”,如果不进行过滤,则所有内容都将被提取到内存中,即使您可能不需要的数据也是如此。

关于c# - LINQ到实体- Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17920394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com