C# Linq无法从大数据集中选择

C# Linq无法从大数据集中选择,c#,asp.net-mvc,entity-framework,linq,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

我试图在对象类型列表中选择一个结果集

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条记录。正因为如此,上面的代码行才起作用,服务器也就瘫痪了。我还有别的方法可以做到这一点吗?谢谢

此查询存在许多问题

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

2nd在查询中,您使用的方法试图向db发出更多请求。你真的需要这些数据吗?如果是,请确保所有内容都使用延迟加载。不要一次迭代所有内容

我可以看到两种解决办法。若您不需要所有这些数据,那个么只从数据库中获取您需要的数据,并尽可能限制检索实体的数量


如果您确实需要所有这些数据,请尝试使用延迟加载,并添加分页(.take()和.skip()方法),以限制在一次调用中检索的实体数

您是否收到任何错误或服务器进入死锁状态?不,我没有收到任何错误,服务器只是被卡住了。我必须重新启动它才能让它工作您的代码行调用其他方法;如果这些方法发出进一步的查询,那么您只是做了太多的工作。我不认为有一个简单的答案。如果
GetImportance
GetOrderedCount
GetPlacedInCartCount
方法是从数据库中获取数据,伙计,问题不是Linq无法从大数据集中选择,因为您肯定会面临一个问题。sql探查器的使用应该会告诉您问题所在。