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

阅读这里和这里的问题给了我一些洞察情况,似乎使用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> ,它使成员分辨率findEnumerable成员而不是Queryable 。 当你想强制查询的一部分以SQL(或类似的方式)运行时,通常会使用它,其余部分则使用LINQ to Objects运行。

看到我的Edulinq博客文章了解更多信息。

现在你实际上有两个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子句filter,sorting和投影客户端。

在entity framework中使用AsEnumerable时要小心。 如果你的表有很多的数据,你的查询变得很慢,因为查询第一个加载数据和应用where子句,sorting和投影。