2009-03-11 2 views
2

ich zur Zeit eine Sammlung von Jobs wie diese holen:Filtering FetchEntityCollection basierend auf Beziehung Sammlung zählen

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; 

wo Eimer viele Prädikate enthält z.B.

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); 

Der Job-Einheit verfügt über eine Sammlung von Attachments (über Fremdschlüssel)

Wie kann ich die Jobliste nur ausgewählte Jobs Filter mit einer oder mehreren Anlagen? Ich weiß, ich könnte einen In-Memory-Filter (AggregateSetPredicate) über eine dynamische Ansicht verwenden, aber dies bedeutet, dass ich alle Jobs abrufen muss, um die richtigen Zähler zu erhalten, der aktuelle Abruf hat ein Maximum für die zurückgegebene Anzahl.

Antwort

2

Lösung ist, dies zu tun:

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