public List <T> Execute() { if (_executed) { return(this.ToList <T>()); } else { foreach (var exp in _matches) { _expression.Translate(exp); } ParsedLinqToSql = _expression.Quary; if (!_partExecuted) { this.AddRange(!string.IsNullOrEmpty(_expression.Quary) ? _repository.Where <T>(_expression) : _repository.GetAbstractAll <T>()); } if (_childrenToLoad.Any() || _loadcholdrenOnlyFirstLevel.HasValue) { foreach (var item in this) { if (_childrenToLoad.Any()) { _repository.LoadChildren(item, false, _ignoreActions, _childrenToLoad.ToArray()); } else { _repository.LoadChildren(item, _loadcholdrenOnlyFirstLevel.Value, _ignoreActions); } } } _executed = true; } return(this.ToList <T>()); }