Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在ASP.NET MVC视图中处理IQueryables?_Mysql_Linq To Sql_Asp.net Mvc 3_Mvccontrib Grid - Fatal编程技术网

Mysql 如何在ASP.NET MVC视图中处理IQueryables?

Mysql 如何在ASP.NET MVC视图中处理IQueryables?,mysql,linq-to-sql,asp.net-mvc-3,mvccontrib-grid,Mysql,Linq To Sql,Asp.net Mvc 3,Mvccontrib Grid,我在MySQL数据库中有一些表来表示来自传感器的记录。我正在开发的系统的一个功能是将这些记录从数据库显示给web用户,因此我使用ADO.NET实体数据模型创建ORM,使用Linq to SQL从数据库获取数据,并将它们存储在我设计的ViewModel中,以便我可以使用MVCContrib Grid Helper显示它: public IQueryable<TrendSignalRecord> GetTrends() { var dataContext = new SmgerE

我在MySQL数据库中有一些表来表示来自传感器的记录。我正在开发的系统的一个功能是将这些记录从数据库显示给web用户,因此我使用ADO.NET实体数据模型创建ORM,使用Linq to SQL从数据库获取数据,并将它们存储在我设计的ViewModel中,以便我可以使用MVCContrib Grid Helper显示它:

public IQueryable<TrendSignalRecord> GetTrends()
{
    var dataContext = new SmgerEntities();
    var trendSignalRecords = from e in dataContext.TrendSignalRecords
                select e;

    return trendSignalRecords;
}

public IQueryable<TrendRecordViewModel> GetTrendsProjected()
{
    var projectedTrendRecords = from t in GetTrends()
    select new TrendRecordViewModel
    {
        TrendID = t.ID,
    TrendName = t.TrendSignalSetting.Name,
    GeneratingUnitID = t.TrendSignalSetting.TrendSetting.GeneratingUnit_ID,
    //{...}
    Unit = t.TrendSignalSetting.Unit
    };
    return projectedTrendRecords;
}
public IQueryable GetTrends()
{
var dataContext=new SmgerEntities();
var trendSignalRecords=来自dataContext.trendSignalRecords中的e
选择e;
返回趋势记录;
}
公共IQueryable getrendsprojected()
{
var projectedTrendRecords=来自GetTrends()中的t
选择新趋势记录视图模型
{
趋势ID=t.ID,
TrendName=t.TrendSignalSetting.Name,
GeneratingUnitID=t.TrendSignalSetting.TrendSetting.GeneratingUnit\U ID,
//{...}
单位=t.TrendSignalSetting.Unit
};
归还项目记录;
}
我调用getRendsProjectedMethod,然后使用LINQtoSQL只选择我想要的记录。它在我的开发场景中运行良好,但当我在真实场景中测试它时,记录的数量要大得多(大约一百万条记录),它停止工作

我放了一些调试消息来测试它,一切正常,但当它到达
returnview()
语句时,它就会停止,并向我抛出一个MySQLException:
Timeout expired
。这让我想知道我发送到页面的数据是否由页面本身检索(它只在页面本身需要时搜索数据库中显示的项目,或者类似的东西)


我的其他所有页面都使用相同的工具集:MVCContrib Grid Helper、ADO.NET、Linq to SQL、MySQL和其他一切都可以正常工作。

如果有数百万条记录,在执行查询之前绝对应该对数据集进行分页。这可以使用
.Skip
.Take
扩展方法来完成。在对数据库运行任何查询之前,应该调用这些函数


如果不分页就试图从数据库中获取数百万条记录,最多可能会导致超时。

好吧,假设中的信息是正确的,
。AsPagination
方法要求您按特定列对数据进行排序。有可能试图在一个包含数百万条记录的表上执行一个
OrderBy
,这只是一个耗时的操作,而且会超时。

您想知道为什么从数据库中提取一百万条记录的数据会导致超时?因为它是可查询的,正如我所想的,数据的长度没有那么重要,因为它只存储查询,然后只使用请求的内容。啊!在另一个页面中,我对相同的记录进行了测试,结果很好。这难道不是不必要的,因为它是一个IQueryable?在页面中显示数据之前,我使用MVCContrib对其进行分页,因此我不尝试获取所有数据,只获取我正在显示的数据。@Bruno,您如何对其进行分页?现在我使用的是MVCContrib提供的AsPagination方法。这正是帮助我使用MVCContrib创建系统结构的页面。