2013-07-23 2 views
1

Я пытаюсь изменить свой общий метод извлечения из моего общего репозитория. Но я хочу, вместо того, чтобы передать строку для includeproperties, чтобы передать это: params Expression<Func<TEntity, object>>[] includeProperties = null Дело в том, когда я называю этот метод:EntityFramework Общий репозиторий, несколько включают?

public virtual IEnumerable<TEntity> Retrieve(Expression<Func<TEntity, bool>> filter = null, params Expression<Func<TEntity, object>>[] includeProperties = null) 

Я хочу, например: TEntityExample.Retrieve(filter: c=>c.Id=Id, includeProperties:c=> c.propertynav1, e=> e.propertynav1.propertynav3, e=> e.Prop4)

Или только если не нужно навигации свойства TEntityExample.Retrieve(filter: c=>c.Id=Id)

Но не знаю, почему includeProperties: не работает, не принимается, кто-нибудь знает, почему, или если я делаю что-то неправильно. Я хочу, чтобы возможность DonT пройти includeProperties или передать его, указав includeProperties:

public virtual IEnumerable<TEntity> Retrieve(Expression<Func<TEntity, bool>> filter = null, string includeProperties = "") 
      { 
       IQueryable<TEntity> query = _dbSet; 

       if (filter != null) 
       { 
        query = query.Where(filter); 
       } 

       if (!string.IsNullOrEmpty(includeProperties)) 
       { 
        foreach (var includeProperty in includeProperties.Split 
         (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) 
        { 
         query = query.Include(includeProperty); 
        } 
       } 
       return query.ToList(); 
      } 
+0

Что вы делаете, это ужасная практика! Я расскажу вам об этом. Вы открываете свой API для всех, включая вас, чтобы злоупотреблять. – DarthVader

+0

'includeProperties' вводится как строка, и все же вы пытаетесь отправить на него лямбда-выражения. –

+0

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

ответ

10

я сделать что-то подобное, но вместо того, чтобы использовать выражения для Жадно нагрузки. Возможно, это поможет:

public TEntity Item(Expression<Func<TEntity, bool>> wherePredicate, params Expression<Func<TEntity, object>>[] includeProperties) 
    { 
     foreach (var property in includeProperties) 
     { 
      _dbSet.Include(property); 
     } 
     return _dbSet.Where(wherePredicate).FirstOrDefault(); 
    } 
+0

Вы можете отказаться от Where and just use .FirstOrDefault (wherePredicate); – ssmith

+0

Да, я также обнаружил, что это правда в течение 2,5 года, так как этот ответ был первоначально опубликован. – MORCHARD

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