AsEnumerable()对LINQ实体的影响是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AsEnumerable()对LINQ实体的影响是什么?相关的知识,希望对你有一定的参考价值。

阅读问题herehere给了我一些洞察情况,似乎使用AsEnumerable是内存消耗。有没有更好的方法来实现这个LINQ以及现在的方式,数据是否可靠?

删除AsEnumerable导致“除了Contains运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现”。

var results = from p in pollcards.AsEnumerable()
                          join s in spoils.AsEnumerable() on new { Ocr = p.OCR, fileName = p.PrintFilename } equals new { Ocr = s.seq, fileName = s.inputFileName }
                          where p.Version == null
                          orderby s.fileOrdering, s.seq
                          select new ReportSpoilsEntity
                          {
                              seq = s.seq,
                              fileOrdering = s.fileOrdering,
                              inputFileName = s.inputFileName,
                              Ocr = p.OCR,
                              ElectorName = p.ElectorName
                          };
答案

AsEnumerable()实际上是对IEnumerable<T>的演员,这使得成员决议找到Enumerable而不是Queryable的成员。它通常在您希望强制部分查询以SQL(或类似)运行时使用,而其余部分则使用LINQ to Objects运行。

有关更多信息,请参阅我的Edulinq blog post on it

现在你实际上有两次打电话给AsEnumerable。我可以看到删除第一个而不是第二个可能会导致问题,但是你试过删除它们吗?

var results = from p in pollcards
              join s in spoils
                 on new { Ocr = p.OCR, fileName = p.PrintFilename } 
                 equals new { Ocr = s.seq, fileName = s.inputFileName }
              where p.Version == null
              orderby s.fileOrdering, s.seq
              select new ReportSpoilsEntity
              {
                  seq = s.seq,
                  fileOrdering = s.fileOrdering,
                  inputFileName = s.inputFileName,
                  Ocr = p.OCR,
                  ElectorName = p.ElectorName
              };
另一答案

使用AsEnumerable将中断查询并将“外部部分”作为linq-to-objects而不是Linq-to-SQL。实际上,您正在为两个表运行“select * from ...”,然后执行连接,where子句过滤,排序和投影客户端。

另一答案

AsEnumerable与Entity Framework结合使用时要小心;如果您的表有大量数据,您的查询可能会很慢,因为查询将首先加载数据,然后应用where子句,排序和投影。

以上是关于AsEnumerable()对LINQ实体的影响是什么?的主要内容,如果未能解决你的问题,请参考以下文章

LINQ 查询子句的顺序是不是会影响实体框架的性能?

linq中AsEnumerable和AsQueryable的区别

linq中AsEnumerable和AsQueryable的区别

LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别

了解 LINQ to SQL 中的 .AsEnumerable()

理解LINQ to SQL中的.AsEnumerable()