【发布时间】:2015-04-02 15:28:23
【问题描述】:
我有以下:
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();
在第一个 Select() 中创建了一个包含第二个列表的对象。
当.Count()被执行时,它会执行第二个Select的fetch吗?或者它是否智能计数,知道它不需要执行Select?
【问题讨论】:
-
记录正在执行的实际 SQL(如果仅此一项并不能为您提供答案,请分析数据库)并自己找出答案。
-
也不知道该怎么做。
-
那么现在是学习的好时机。您应该检查您曾经编写过的大多数 LINQ 查询的 SQL(至少是任何复杂的查询),以验证您的工作并确保在幕后没有发生任何奇怪的事情。至于如何,这将根据查询提供程序而有所不同,但每个都将公开一种记录它的方法。在数据库端查看查询的详细执行计划也是如此;查找您的特定数据库。
-
但是,我意识到我可以创建第一个没有选择的 IQueryable,然后再添加选择部分。感谢您的帮助。
-
我在 Visual Studio 下使用 MDF。
标签: c# linq iqueryable