Linq-запрос для объектов поиска со связями «многие ко многим» - PullRequest
0 голосов
/ 26 января 2012

У меня проблема с поиском.Итак, у меня есть сущность Задача и Владелец.Они находятся во многих отношениях.Моя цель - найти все Задачи какого-то Владельца.В структуре данных сущности отсутствует таблица отношений как выдающаяся сущность.Я создаю выражение linq-фильтра, но не могу включить в него правило для владельцев.Я попытался использовать несколько лямбда-выражений, но компилятор попросил меня использовать простые типы и никаких «владельцев».

            Expression<Func<Task, bool>> filter = e =>
                (String.IsNullOrEmpty(filterData.Title) || e.Title.StartsWith(filterData.Title))
               && (isDueDateSkipped || (DateTime.Compare(dueDate, e.DueDate ?? now) == 0))                       
               && (isCloseDateSkipped || (DateTime.Compare(closeDate, e.CloseDate ?? now) == 0))
               && (isTypeSkipped || e.Type.Id == typeId)
               && (isStatusSkipped || e.Status.Id == statusId)
               && (isPrioritySkipped || e.Priority.Id == priorityId)
               && (isMemberSkipped || e.Member.Id == memberId);

Не могли бы вы мне помочь?

Ответы [ 2 ]

0 голосов
/ 27 января 2012

Я нашел ответ на свой вопрос:

  Expression<Func<Task, bool>> filter = e =>
                   (String.IsNullOrEmpty(filterData.Title) || e.Title.StartsWith(filterData.Title))
                   && (isDueDateSkipped || (DateTime.Compare(dueDate, e.DueDate ?? now) == 0))
                   && (isCloseDateSkipped || (DateTime.Compare(closeDate, e.CloseDate ?? now) == 0))
                   && (isTypeSkipped || e.Type.Id == typeId)
                   && (isStatusSkipped || e.Status.Id == statusId)
                   && (isPrioritySkipped || e.Priority.Id == priorityId)
                   && (isMemberSkipped || e.Member.Id == memberId)
                   && (isOwnerSkipped || e.Owners.Select(o => o.Id).Contains(ownerId));
        return filter;
0 голосов
/ 26 января 2012

Я полагаю, что это задача:

 Expression<Func<Task, bool>> filter = e =>
            (String.IsNullOrEmpty(filterData.Title) || e.Title.StartsWith(filterData.Title))
           && (isDueDateSkipped || (DateTime.Compare(dueDate, e.DueDate ?? now) == 0))                       
           && (isCloseDateSkipped || (DateTime.Compare(closeDate, e.CloseDate ?? now) == 0))
           && (isTypeSkipped || e.Type.Id == typeId)
           && (isStatusSkipped || e.Status.Id == statusId)
           && (isPrioritySkipped || e.Priority.Id == priorityId)
           && (isMemberSkipped || e.Member.Id == memberId)
           && (isOwnerSkipped || TaskOwners.Where(to => to.TaskID == e.TaskID && to.OwnerID == ownerFilter.OwnerID).Count() > 0);

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...