0

如何提高以下 linq 查询的性能?

在运行它时,它抛出了一个错误System.OutOfMemoryException注意:我在实体中有很多记录XrmContext.sun_POSSet

var a = (from temple in XrmContext.sun_POSSet
         select new POS()
         {
             id = temple.Id,
             Country = temple.sun_sun_country_sun_POS == null ? "" : temple.sun_sun_country_sun_POS.sun_name,
             CountryId = temple.sun_sun_country_sun_POS == null ? "" : temple.sun_sun_country_sun_POS.Id.ToString(),
             stringint = temple.sun_sun_stringint_sun_placeofstu == null ? "" : temple.sun_sun_stringint_sun_placeofstu.sun_name,
             stringintId = temple.sun_sun_stringint_sun_placeofstu == null ? "" : temple.sun_sun_stringint_sun_placeofstu.Id.ToString(),
             FullName = temple.sun_contact_sun_POS.FullName,
             EMail = temple.sun_contact_sun_POS.EMailAddress1,
             MobilePhone = temple.sun_contact_sun_POS.MobilePhone
         }).ToList<POS>();
4

1 回答 1

3

如果没有关于记录数量的更多信息,我会说你得到了一个,OutOfMemoryException因为你正在调用ToList()一个太大而无法保存在内存中的数据集。

ToList()强制评估底层IQueryable<T>,在这种情况下会导致所有记录返回给客户端并在内存中实例化。在你的情况下,根本没有足够的空间——你不应该假设会有。将数据集带回客户端时缩小数据集

您应该考虑使用Skip()andTake()来实现分页,或者使用适当的Where()子句来过滤数据。

于 2013-10-14T15:20:39.273 回答