C# AsEnumerable()对LINQ实体有什么影响?
通过阅读这些问题,我对目前的情况有了一些了解,似乎使用AsEnumerable是一种消耗内存的方法。有没有更好的方法来实现这一点LINQ和现在的做法,得出的数据可靠吗 除了Contains运算符外,在查询运算符的LINQ到SQL实现中不能使用删除“本地序列”中的AsEnumerable结果C# AsEnumerable()对LINQ实体有什么影响?,c#,linq,entity,enumerable,C#,Linq,Entity,Enumerable,通过阅读这些问题,我对目前的情况有了一些了解,似乎使用AsEnumerable是一种消耗内存的方法。有没有更好的方法来实现这一点LINQ和现在的做法,得出的数据可靠吗 除了Contains运算符外,在查询运算符的LINQ到SQL实现中不能使用删除“本地序列”中的AsEnumerable结果 使用AsEnumerable将中断查询,并将“外部部分”作为linq to对象而不是linq to SQL来执行。实际上,您正在为两个表运行“select*from…”,然后在客户端执行连接、where子句筛
使用AsEnumerable将中断查询,并将“外部部分”作为linq to对象而不是linq to SQL来执行。实际上,您正在为两个表运行“select*from…”,然后在客户端执行连接、where子句筛选、排序和投影。
AsEnumerable()
实际上是对IEnumerable
的转换,这使得成员解析查找可枚举的成员,而不是可查询的。当您希望强制查询的一部分以SQL(或类似的方式)运行,而其余部分使用LINQ to对象运行时,通常会使用它
有关更多信息,请参阅我的
现在您实际上有两个对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
时要小心;如果您的表有大量数据,您的查询可能会很慢,因为查询将首先加载数据,然后应用where
子句、排序和投影 我遇到的错误是在删除两个asenumerable时出现的。(我没有尝试只删除一个)。战利品和波尔卡本身就是LINQ声明,这有关系吗?(一个IQueryable和一个Collection)@Andy:是的,破坏
是一个内存中的集合,这一点绝对相关。我假设这是另一个DB查询。我不知道有什么办法能把数据库里的数据一分为二。战利品
最初是否来自数据库?战利品是通过两个查询创建的,一个用于前10名,一个用于前10名,对结果进行并集,然后填充集合以通过该并集进行搜索。我不知道为什么我们不返回union并将其从Iqueryable转换为集合。(返回IQueryable可以解决对asEnumerable的需求吗?@Andy:将工会作为一个IQueryable
可以解决这个问题。。。试一试:)无可否认,生成的SQL可能非常难看,但它可以做您想要的事情。
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
};