У меня было определение метода, как это:Дополнительные общие Введенные параметры не могут быть выведены
public List<TEntity> GetAll<T> (
params Expression<Func<TEntity, T>>[] fieldsToExclude)
{
...
}
Но когда я это сделать, как это я не могу иметь разные типы.
Так что я изменил его к этому:
public List<TEntity> GetAll<T1, T2, T3, T4, T5, T6, T7, T8> (
Expression<Func<TEntity, T1>> field1ToExclude,
Expression<Func<TEntity, T2>> field2ToExclude = null,
Expression<Func<TEntity, T3>> field3ToExclude = null,
Expression<Func<TEntity, T4>> field4ToExclude = null,
Expression<Func<TEntity, T5>> field5ToExclude = null,
Expression<Func<TEntity, T6>> field6ToExclude = null,
Expression<Func<TEntity, T7>> field7ToExclude = null,
Expression<Func<TEntity, T8>> field8ToExclude = null)
{
...
}
И я стараюсь использовать это нравится:
var allItems = GetAll(p => p.SomeProperty1, p => p.SomeProperty2);
Но теперь на стороне клиента, он говорит:
аргументы типа «...» не может быть выведено из использования.
Это имеет смысл, поскольку я не использую необязательные параметры вообще. Когда я даю все параметры, он работает нормально, но опциональность делает его ошибочным.
Создание многих методов с помощью телескопических параметров - выход. Но, должно быть, я должен быть более аккуратным. Как я могу предоставить эту функциональность?
Вы должны идти с 'Params Expression> [] fieldsToExclude' и (предполагая, что это поставщик EntityFramework, с которым вы передаете эти выражения), касаются фактического литья выражения. –
haim770
В основном не имеет решения. Типичным обходным решением является использование выражения 'params Expression> []' и обращение к 'Expression.Convert', введенному для типов значений. –
ну, это не EntityFramework провайдер, поэтому мне не нужно иметь дело с типом. Я просто использую имя поля, и на самом деле я не использовал ни одного из 'T'. Следовательно, это должно действительно работать. Вы должны опубликовать его как ответ @ haim770. –