EF - 查询大数据集导致内存不足异常

时间:2014-05-01 09:33:19

标签: c# sql xml entity-framework

我有一个包含多个xml字段的数据表。我正在使用EF来获取数据:

List<tblMSASAN> msa = ctx.tblMSASANs.Where(s => s.LCMGSupportLevel != "decommissioned").ToList();

然后使用foreach迭代列表并将xml字段拉入xmldocument并查询每个节点更新属性,然后保存上下文。

但是,数据集太大而且出现内存不足异常。 所以我需要能够首先查询xml以返回一个较小的数据集。

List<tblWinServer> servers = ctx.tblWinServers.AsNoTracking().Where(s => s.LCMGSupportLevel != "decommissioned" && ( Convert.ToString(s.TapeDrives).Contains("Calyx") ||Convert.ToString(s.DiskShelves).Contains("Calyx"))).ToList();

但这不适用于NotSupportedException。

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

AsNoTracking()方法返回IQueryable但如果要在Where子句中使用ToString()方法,则必须将IQueryable转换为IEnumerable:

List<tblWinServer> servers = ctx.tblWinServers.AsNoTracking().AsEnumerable().Where(s => s.LCMGSupportLevel != "decommissioned" && ( Convert.ToString(s.TapeDrives).Contains("Calyx") ||Convert.ToString(s.DiskShelves).Contains("Calyx"))).ToList();