Man*_*ani 8 c# linq linq-to-sql
鉴于以下LINQ声明,哪个更有效?
一:
public List<Log> GetLatestLogEntries()
{
var logEntries = from entry in db.Logs
select entry;
return logEntries.ToList().Take(10);
}
Run Code Online (Sandbox Code Playgroud)
二:
public List<Log> GetLatestLogEntries()
{
var logEntries = from entry in db.Logs
select entry;
return logEntries.Take(10).ToList();
}
Run Code Online (Sandbox Code Playgroud)
我知道.ToList()会立即执行查询.
Jon*_*eet 20
第一个版本甚至不会编译 - 因为返回值Take是a IEnumerable<T>,而不是a List<T>.所以你需要它:
public List<Log> GetLatestLogEntries()
{
var logEntries = from entry in db.Logs
select entry;
return logEntries.ToList().Take(10).ToList();
}
Run Code Online (Sandbox Code Playgroud)
这将从数据库中获取所有数据并将其转换为列表,然后获取前10个条目,然后再将其转换为列表.
获取Take(10)数据库中发生(即第二种形式)当然看起来很多赫克便宜,我...
请注意,没有Queryable.ToList()方法 - 您将最终调用Enumerable.ToList()哪个将获取所有条目.换句话说,调用ToList 不参与SQL翻译,而Take确实如此.
另请注意,在此处使用查询表达式也没有多大意义.我把它写成:
public List<Log> GetLatestLogEntries()
{
return db.Log.Take(10).ToList();
}
Run Code Online (Sandbox Code Playgroud)
请注意,你可能想要一个OrderBy电话 - 否则它只需要找到它找到的前10个条目,这可能不是最新的......
| 归档时间: |
|
| 查看次数: |
9327 次 |
| 最近记录: |