2013-05-29 3 views
1

Я создал EF 4.3, используя общий шаблон репозитория/uow.Как добавить предложение where в эту инструкцию Linq Linq

Типичный метод выглядит следующим образом:

using (var uow = new UnitOfWork(ConnectionString.PaydayLenders)) 
{ 
    var r = new CrudRepo<Tier>(uow.Context); 
    return r.Find() 
    .Include("CommissionTiers.MatchService.Provider") 
    .ToList(); 
} 

Как вы можете видеть, я также включать другие таблицы в выборку с использованием свойств навигации.

В этом примере у Уровня есть много комиссионных, у CommissionTiers есть MatchService, а MatchService - у провайдера.

Что я хочу сделать, это выбрать, где CommissionTier.Status = 1 и Provider = 1. Есть ли способ, который можно включить в этот оператор/метод?

+0

Include предназначен только для активной загрузки. вы уверены, что вам это нужно? –

+0

EF намного более макет, что linq2sql был, я бы поставил под вопрос причину использования общего репозитория/uow, он добавляет ненужную абстракцию в большинстве случаев. С другой стороны, если Find() возвращает IQueryable, вы должны иметь возможность использовать свойства навигации, чтобы выполнять то, что вам нужно. – Giedrius

+1

@omerschleifer - Ну, если я его не использую, я все равно вернусь к базе данных для CommissionTiers и т. Д. – dotnetnoob

ответ

-1

Вы можете использовать Join, чтобы получить требуемую функциональность.

2

Попробуйте это:

Where(t => t.CommissionTiers 
      .Any(ct => ct.Status == 1 && ct.MatchService.Provider == 1)) 

Поскольку у вас есть навигационные свойства на месте нет никакой необходимости явного присоединиться в своем заявлении LINQ.

+0

Должно быть 'Where (t => t.CommissionTier.Any (...' –

+0

@WiktorZychla: Thanks , фиксированный –

+0

@ DanielHilgarth - Не совсем с желаемым результатом. Когда я отмечаю статус провайдера, удаляется только последний уровень выбранного провайдера, а не все 3 уровня. – dotnetnoob

Смежные вопросы