Фильтрация FetchEntityCollection на основе количества коллекций отношений

В настоящее время я получаю коллекцию таких работ:

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;

где ведро содержит много предикатов, например

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

Сущность Job имеет коллекцию вложений (через внешний ключ)

Как я могу отфильтровать список работ, чтобы выбрать только работы с одним или несколькими вложениями? Я знаю, что мог бы использовать фильтр в памяти (AggregateSetPredicate) через динамическое представление, но это будет означать, что мне придется выбрать все задания, чтобы получить правильные значения, текущая выборка имеет максимум на возвращаемом числе.

1 ответ

Решение

Решение состоит в том, чтобы сделать это:

    bucket.Relations.Add(JobEntity.Relations.AttachmentEntityUsingJobFk);
FieldCompareSetPredicate filteredAttachments;
filteredAttachments = new FieldCompareSetPredicate(JobFields.Id, null,
                                                   AttachmentFields.JobFk, null,
                                                   SetOperator.In, null);
 bucket.PredicateExpression.Add(filteredAttachments);
Другие вопросы по тегам