gpt4 book ai didi

c# - LINQ 和大数据库中的选择行

转载 作者:行者123 更新时间:2023-11-30 19:43:07 25 4
gpt4 key购买 nike

我有一些数据库,现在它包含一个大约有 100 行的表。但将来它不会有 100 行,而是 1 000 000 多行,我必须小心我现在正在开发的 Web 应用程序。

接下来是问题:在网页上,我需要创建分页列表,向用户显示记录。这是我打算使用的代码示例

public IQueryable<MyTable> GetRows(int from, int to)
{
var queryRes = (from row in SomeDataContext.MyTable
order by row.id
select row).AsQueriable();
return queryRes.Take(to).Skip(from);
}

这只是代码示例。我没有运行它。但问题是在这种情况下会发生什么?我看到两个场景

  1. 它将从数据库和服务器端加载所有行,并返回“从”到“到”范围内的记录。其他将被忽略。在这种情况下,我的应用程序将遇到很大的麻烦。想象一下每次从数据库中加载 1 000 000 行。这将是一场灾难。
  2. 它将构造 SQL 请求,只返回我需要的行而不加载其他行。这正是我所需要的。

我认为这将是 2 种情况,但我不确定也无法检查。我说得对吗?

最佳答案

作为旁注,您不必调用 AsQueryable。做就够了

var queryRes = SomeDataContext.MyTable.OrderBy(r => r.Id);
return queryRes.Take(to).Skip(from);

然后回答您的问题 - 场景 2 将被执行。您始终可以使用 SQL Server Profiler 检查生成的 SQL,但如果您使用的是 Entity Framework,您甚至可以执行 queryRes.ToString()。正如@Aron 正确指出的那样 - 只有在枚举结果时(例如调用 queryRes.ToList())才会对数据库实际执行查询。

这些问题更详细地解决了查找SQL代码的问题:

关于c# - LINQ 和大数据库中的选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15965442/

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