我正在尝试将结果集选择到对象类型列表中。
var temp = res.Select(a => new ContentAudit {
locale = a.locale,
product_code = a.product_code, product_name = a.product_name,
image = a.image, product_short_description = a.product_short_description,
product_long_description = a.product_long_description,
items = a.items,
service_articles = GetServiceArticleCount(a.product_id).ToString(),
is_deleted = a.is_deleted, views = a.views,
placed_in_cart = GetPlacedInCartCount(a.product_id).ToString(),
ordered = GetOrderedCount(a.product_id).ToString(),
Importance = GetImportance(a.product_id),
operation = (a.product_id.ToString()) }
).ToList();
我选择的是' res'变量,它是从数据库中选择的结果集。其中有65000条记录。因此,上面的代码行工作并且服务器被卡住了。有没有其他方法我可以做到这一点?谢谢
答案 0 :(得分:1)
此查询存在许多问题。
第一您正在尝试从数据库中选择65000条记录并使用.ToList() 它将迭代所有对象。 您应该使用IEnumerable(或IQueryable),并使用延迟加载。 如果您不需要所有这些对象,请尝试添加.Where()语句来限制实体数量。
查询中的第二您正在使用的方法正在尝试向db发出更多请求。你真的需要所有这些数据吗?如果是,请确保所有内容都使用延迟加载。不要一次全部迭代!
我可以看到两种解决方案。如果您不需要所有这些数据,请仅从db中获取所需的数据,并限制重新获取的数量和其可能的数量。
如果您真的需要所有这些数据,请尝试使用延迟加载,并添加分页(.take()和.skip()方法)以限制在一次调用中重新获得的entites数量。