给定以下 LINQ 语句,哪个更有效?
一个:
public List<Log> GetLatestLogEntries()
{
var logEntries = from entry in db.Logs
select entry;
return logEntries.ToList().Take(10);
}
两个:
public List<Log> GetLatestLogEntries()
{
var logEntries = from entry in db.Logs
select entry;
return logEntries.Take(10).ToList();
}
我知道 .ToList() 会立即执行查询。
最佳答案
第一个版本甚至无法编译——因为 Take
的返回值是一个 IEnumerable<T>
, 不是 List<T>
.所以你需要它是:
public List<Log> GetLatestLogEntries()
{
var logEntries = from entry in db.Logs
select entry;
return logEntries.ToList().Take(10).ToList();
}
这将从数据库中获取所有数据并将其转换为列表,然后获取前 10 个条目,然后再次将其转换为列表。 p>
获取 Take(10)
出现在数据库中(即第二种形式)对我来说当然看起来便宜很多......
请注意,没有 Queryable.ToList()
方法 - 你最终会调用 Enumerable.ToList()
这将获取所有条目。换句话说,调用 ToList
不参与 SQL 翻译,而 Take
另请注意,此处使用查询表达式也没有多大意义。我会写成:
public List<Log> GetLatestLogEntries()
{
return db.Log.Take(10).ToList();
}
请注意,您可能需要一个 OrderBy
调用 - 否则它只会获取它找到的前 10 个条目,这些条目可能不是最新的...
关于c# - LINQ ToList().Take(10) vs Take(10).ToList() 哪个生成更高效的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4389879/