Cap*_*and 2 c# linq iqueryable
我有以下几点:
IQueryable<ViewAccountEntry> viewAccountEntries = db.AccountEntries
.Where(x => x.DEntryID == 0)
.Select(x => new ViewAccountEntry()
{
AccountEntry = x,
DAccountEntries = db.AccountEntries
.Where(y => y.DEntryID == 0
&& y.Amount == -x.Amount
&& y.DateEntry == x.DateEntry)
.ToList()
});
Pages = new PageInfo(viewAccountEntries.Count(), page);
ViewAccountEntries = viewAccountEntries
.OrderBy(x => x.AccountEntry.DateEntry)
.Skip(Pages.ItemsSkipped)
.Take(Pages.ItemsPerPage)
.ToList();
Run Code Online (Sandbox Code Playgroud)
在第Select()一个对象内部创建一个包含第二个列表的对象。
当.Count()被执行时,它执行获取第二的Select?还是知道它既不需要执行也不算聪明Select?
Count()变成Count()查询引擎知道的最佳实现。
数据库支持的查询引擎,如实体框架或LINQ2SQL通常会使用一些原因COUNT(*),COUNT(DISTINCT some_field)或类似的生产的SQL中使用。
其他linq实现将同样尝试尽可能地聪明。例如,Count如果在实现ICollection或的对象上调用linq-to-objects,则它将调用getter而不是通过整个枚举进行枚举ICollection<T>。
给定的查询引擎在处理给定的使用时Count()可能最终不得不循环进行项的枚举,因为它无法找出任何更有效的方法。通常,按照Linq的初始类型来保存内容的次数越多(例如,ToList()除非有必要,否则不要打电话,或者即使AsEnumerable()您可以不这样做也不要打电话),引擎会做得更好,尽管有有时例外。
| 归档时间: |
|
| 查看次数: |
3429 次 |
| 最近记录: |