我有一个返回IQueryable
using LINQ的方法
return eventFacade.GetNewBuildingEvents()
.Where(EventPredicates.IsBuildingOwner(
memberFacade.GetFriendsAndColleagues(m).Select(y => y.Id))
)
GetFriendsAndColleagues(m).Select(y => y.Id)
返回一个 IEnumerable
public static Expression<Func<Event, bool>> IsBuildingOwner(IEnumerable<int> friendids)
{
return
x =>
x.Building.BuildingMembers.Where(k => k.Type == MemberType.Owner)
.Any(p => friendids.Contains(p.Member.Id));
}
一般来说,我仍在学习 LINQ 和 C#。我知道两者IQueryable
并IEnumerable
推迟执行,并且我知道在数据库中进行过滤IQueryable
时IEnumerable
在内存中进行。
我也知道,在迭代集合的情况下,最好枚举集合,这样每次迭代都不会调用数据库。
因此,当我的最终查询被执行时,IEnumerable
传递到我的表达式中是否会被枚举一次,然后用于比较返回的每个项目GetNewBuildingEvents()
或者
它是否会在每次比较时调用数据库以获取列表?