internal ICollection <T> Get <T>(EntityFilter filter) where T : Entity { // The returned entity type is determined by // 1) the filter passed in or 2) the type of T if there is no filter. var targetEntityType = filter != null ? filter.EntityType : typeof(T); var type = ResolveAssetType(targetEntityType); var query = new Query(type); if (filter != null) { var defaultToken = GetDefaultOrderByToken(targetEntityType); IAttributeDefinition defaultOrderBy = null; if (defaultToken != null) { defaultOrderBy = instance.MetaModel.GetAttributeDefinition(defaultToken); } query.Filter = filter.BuildFilter(type, instance); query.Find = filter.BuildFind(type); query.OrderBy = filter.BuildOrderBy(type, defaultOrderBy); query.Selection = filter.BuildSelection(type); } return(instance.QueryToEntityEnum <T>(query)); }
internal double?GetSum(Entity entity, string multiRelationName, EntityFilter filter, string numericAttributeName) { var oid = GetOid(entity); var multiRelation = oid.AssetType.GetAttributeDefinition(multiRelationName); var relatedType = multiRelation.RelatedAsset; var filtered = multiRelation; if (filter != null) { var term = filter.BuildFilter(relatedType, this); if (term != null) { filtered = multiRelation.Filter(term); } } var relatedAttribute = relatedType.GetAttributeDefinition(numericAttributeName); var joined = filtered.Join(relatedAttribute); var sum = joined.Aggregate(Aggregate.Sum); return((double?)RetrieveAttribute(oid, sum, false).Value); }
public ResourceTableEntry MoveToResource([CanBeNull] EnvDTE.Document document) { var extension = Path.GetExtension(document?.FullName); if (extension == null) { return(null); } var fileName = Path.GetFileNameWithoutExtension(document.FullName); var configurationItems = _exportProvider.GetExportedValue <DteConfiguration>().MoveToResources.Items; var configuration = configurationItems .FirstOrDefault(item => item.ParseExtensions().Contains(extension, StringComparer.OrdinalIgnoreCase)); if (configuration == null) { return(null); } var selection = GetSelection(document); if (selection == null) { return(null); } IParser parser = new GenericParser(); var text = !selection.IsEmpty ? selection.Text?.Trim('"') : parser.LocateString(selection, true); if (string.IsNullOrEmpty(text)) { return(null); } var patterns = configuration.ParsePatterns().ToArray(); var resourceViewModel = _exportProvider.GetExportedValue <ResourceViewModel>(); resourceViewModel.Reload(); var resourceManager = _exportProvider.GetExportedValue <ResourceManager>(); var entities = resourceManager.ResourceEntities .Where(entity => !entity.IsWinFormsDesignerResource) .ToList(); var filter = EntityFilter.BuildFilter(Settings.Default.ResourceFilter); if (filter != null) { entities.RemoveAll(item => !filter(item.ToString())); } var projectResources = new HashSet <ResourceEntity>(GetResourceEntiesFromProject(document, entities)); // put resources from the same project on top entities.RemoveAll(entity => projectResources.Contains(entity)); entities.InsertRange(0, projectResources); // put the last used entry on top, if it's in the same project, or the last access was cross-project. if (_lastUsedEntity != null) { if (!_isLastUsedEntityInSameProject || IsInProject(_lastUsedEntity, document)) { entities.Remove(_lastUsedEntity); entities.Insert(0, _lastUsedEntity); } } var viewModel = new MoveToResourceViewModel(patterns, entities, text, extension, selection.ClassName, selection.FunctionName, fileName); var confirmed = ConfirmationDialog.Show(_exportProvider, viewModel, Resources.MoveToResource, null).GetValueOrDefault(); if (!confirmed || string.IsNullOrEmpty(viewModel.Key)) { return(null); } ResourceTableEntry entry = null; if (!viewModel.ReuseExisiting) { var entity = _lastUsedEntity = viewModel.SelectedResourceEntity; if (entity == null) { return(null); } _isLastUsedEntityInSameProject = IsInProject(entity, document); entry = entity.Add(viewModel.Key); if (entry == null) { return(null); } entry.Values[null] = viewModel.Value; entry.Comment = viewModel.Comment; } selection.ReplaceWith(viewModel.Replacement?.Value); return(entry); }