private IQueryable HandleMultipleSourceQueryable(object multipleSourceQueryableCandidate) { IDataFacadeQueryable multipleSourceQueryable = multipleSourceQueryableCandidate as IDataFacadeQueryable; if (multipleSourceQueryable == null) { return(null); } IQueryable queryable; if (!_pullAllToMemory && multipleSourceQueryable.Sources.Count == 1) { queryable = multipleSourceQueryable.Sources.First(); } else { IQueryable[] sources = multipleSourceQueryable.Sources.ToArray(); queryable = LoadToMemory(multipleSourceQueryable.InterfaceType, sources); } if (_queryable == null) { _queryable = queryable; } return(queryable); }
protected override Expression VisitConstant(ConstantExpression c) { if (c.Value is IDataFacadeQueryable) { IDataFacadeQueryable multibleSourceQueryable = (IDataFacadeQueryable)c.Value; _sourceCount += multibleSourceQueryable.Sources.Count(); IDataFacadeQueryable found = _multibleSourceQueryables.Find(delegate(IDataFacadeQueryable queryable) { return(object.ReferenceEquals(multibleSourceQueryable, queryable)); }); if (found == null) { _multibleSourceQueryables.Add(multibleSourceQueryable); } } return(base.VisitConstant(c)); }