У меня есть класс RepositoryBase, где я определяю базовые методы crud для моего Контекста Entity Framework. У меня есть эти два перегруженных метода All():Вывод типа в методах репозитория
public virtual IQueryable<T> All<TKey>(Expression<Func<T, bool>> predicate)
{
return All().Where(predicate);
}
public virtual PagedResult<T> All<TKey>(int startRowIndex, int maximumRows,
Expression<Func<T, TKey>> orderingKey, Expression<Func<T, bool>> predicate,
bool sortDescending = false)
{
var subset = All().Where(predicate);
IEnumerable<T> result = sortDescending
? subset.OrderByDescending(orderingKey).Skip(startRowIndex).Take(maximumRows)
: subset.OrderBy(orderingKey).Skip(startRowIndex).Take(maximumRows);
//More code ommited
}
Первый метод всегда нуждается во мне явно указать тип объекта, а второй нет. Почему это?
Пример, это не компилируется:
return All(s => s.LoanApplicationId == loanApplicationId)
И вместо этого я должен назвать это так:
return All<LoanApplication>(s => s.LoanApplicationId == loanApplicationId)
Но это скомпилировать:
return All(0,10, s => s.Name, s => s.LoanApplicationId == loanApplicationId, false)