gpt4 book ai didi

mysql - ASP.NET MVC View 中如何处理 IQueryables?

转载 作者:行者123 更新时间:2023-11-29 09:07:35 25 4
gpt4 key购买 nike

我在 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;
}

我调用 GetTrendsProjectedMethod,然后使用 Linq to SQL 仅选择我想要的记录。它在我的开发场景中工作正常,但是当我在真实场景中测试它时,记录数量要大得多(大约一百万条记录),它会停止工作。

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

我的所有其他页面都使用同一组工具:MVCContrib Grid Helper、ADO.NET、Linq to SQL、MySQL,其他一切都正常。

最佳答案

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

尝试在不分页的情况下从数据库中获取数百万条记录很可能会导致超时。

关于mysql - ASP.NET MVC View 中如何处理 IQueryables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6616016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com