Linq无法从大数据集中进行选择

时间:2018-01-09 10:34:46

标签: c# asp.net-mvc entity-framework linq

我正在尝试将结果集选择到对象类型列表中。

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条记录。因此,上面的代码行工作并且服务器被卡住了。有没有其他方法我可以做到这一点?谢谢

1 个答案:

答案 0 :(得分:1)

此查询存在许多问题。

第一您正在尝试从数据库中选择65000条记录并使用.ToList() 它将迭代所有对象。 您应该使用IEnumerable(或IQueryable),并使用延迟加载。 如果您不需要所有这些对象,请尝试添加.Where()语句来限制实体数量。

查询中的

第二您正在使用的方法正在尝试向db发出更多请求。你真的需要所有这些数据吗?如果是,请确保所有内容都使用延迟加载。不要一次全部迭代!

我可以看到两种解决方案。如果您不需要所有这些数据,请仅从db中获取所需的数据,并限制重新获取的数量和其可能的数量。

如果您真的需要所有这些数据,请尝试使用延迟加载,并添加分页(.take()和.skip()方法)以限制在一次调用中重新获得的entites数量。