AsEnumerable()对LINQ实体的影响是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AsEnumerable()对LINQ实体的影响是什么?相关的知识,希望对你有一定的参考价值。
阅读问题here和here给了我一些洞察情况,似乎使用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中AsEnumerable和AsQueryable的区别
linq中AsEnumerable和AsQueryable的区别
LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别