2013-03-18 9 views
1

У меня есть следующий метод хранилищу, применяет фильтр, а затем заказывает коллекцию:Generic Repository Метод бросает ошибку преобразования

public IQueryable<TE> SelectAll(Expression<Func<TE, bool>> predicate, 
      Expression<Func<TE, object>> sortExpression, bool orderDescending = false) 
     { 
      var list = _ctx.CreateQuery<TE>("[" + typeof(TE).Name + "]") 
       .AsExpandable().Where(predicate); 

      return orderDescending 
       ? list.OrderByDescending(sortExpression) 
       : list.OrderBy(sortExpression); 
     } 

где предикат работает отлично, но когда, если применяется OrderBy мы получим следующее сообщение об ошибке :

Невозможно ввести тип 'System.Int32' для ввода 'System.Object'. LINQ to Entities поддерживает только листинг EDM-примитивов или типов перечислений.

Edit: Это код вызова:

var documentos = SelectAll(d => serviciosId.Contains(d.ServicioId) && d.TipoSociedadId == tipoSociedadId, d => d.Grupo); 
+0

Какой тип 'd.Grupo'? – ecampver

+0

@ e.campver Int32 – amhed

ответ

1

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

public IQueryable<TE> SelectAll<TE, TKey>(Expression<Func<TE, bool>> predicate, 
      Expression<Func<TE, TKey>> sortExpression, bool orderDescending = false) 
{ 
    var list = _ctx.CreateQuery<TE>("[" + typeof(TE).Name + "]") 
        .AsExpandable().Where(predicate); 

    return orderDescending 
     ? list.OrderByDescending(sortExpression) 
     : list.OrderBy(sortExpression); 
} 

Проблема заключается в том, что второй параметр Func в предложении OrderBy в коде object, и вы передаете его int, затем он пытается отличить это int от object. В коде, который я вставил выше, у вас есть дополнительный общий параметр, который позволяет вам передавать любой тип функции заказа, поэтому он должен работать.

+0

Я получаю ошибку компиляции (не могу разрешить символ TKey) – amhed

+0

@amhed: К сожалению, это была опечатка, вам нужно добавить общий параметр к определению метода, например 'SellectAll ' и удалить 'TKey' из' IQueryable'. Я редактировал свой пост. – ecampver

+0

Получил! Благодаря! – amhed

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