2009-03-11 5 views
2

Je vais chercher actuellement une collection d'emplois comme ceci:Filtrage FetchEntityCollection en fonction du nombre collecte de relations

jobs = new EntityCollection<JobEntity>(new JobEntityFactory()); 

var bucket = GetJobsBucket(filter); 

var tempContext = new Context(); 
tempContext.Add(jobs); 
var sorter = new SortExpression(JobFields.Id | SortOperator.Descending); 

adapter.FetchEntityCollection(jobs, bucket, maxCount, sorter, JobListPrefetchPath(false)); 

filter.TotalMatchesCount = adapter.GetDbCount(new JobEntityFactory().CreateFields(), bucket, null, false); 
filter.ReturnedMatchesCount = jobs.Count; 

tempContext.Clear(); 

return jobs; 

où seau contient beaucoup de prédicats par exemple

bucket.Relations.Add(JobEntity.Relations.JobTypeEntityUsingJobTypeFk); 
    bucket.Relations.Add(JobTypeEntity.Relations.JobTypeCategoryEntityUsingCategoryFk); 
    var fieldCompareValuePredicate = new FieldCompareValuePredicate(JobTypeCategoryFields.Filter, null, 
        ComparisonOperator.Equal, filter.JobCategory) { CaseSensitiveCollation = true };       
    bucket.PredicateExpression.Add(fieldCompareValuePredicate); 

L'entité d'emploi a une collection de pièces jointes (par clé étrangère)

Comment puis-je filtrer la liste des tâches à l'emploi que vous cherchez avec une ou plusieurs pièces jointes? Je sais que je pourrais utiliser un filtre en mémoire (AggregateSetPredicate) via une vue dynamique mais cela signifiera que je devrai récupérer tous les travaux afin d'obtenir les comptes corrects, l'extraction en cours a un maximum sur le nombre retourné.

Répondre

2

La solution est de le faire:

bucket.Relations.Add(JobEntity.Relations.AttachmentEntityUsingJobFk); 
FieldCompareSetPredicate filteredAttachments; 
filteredAttachments = new FieldCompareSetPredicate(JobFields.Id, null, 
                AttachmentFields.JobFk, null, 
                SetOperator.In, null); 
bucket.PredicateExpression.Add(filteredAttachments);