In my data repository, I have a base class and a derived class, as shown below.
public abstract class RepositoryBase<T> : IRepository<T> where T : EntityBase
{
public async Task<T> FindOneAsync(Expression<Func<T, bool>> predicate)
{
List<T> list = await SearchForAsync(predicate);
return list.FirstOrDefault();
}
}
public class CommentUrlRepository : RepositoryBase<CommentUrl>, ICommentUrlRepository
{
public async Task<CommentUrlCommon> FindOneAsync(Expression<Func<CommentUrlCommon, bool>> predicate)
{
Expression<Func<CommentUrl, bool>> lambda = Cast(predicate);
CommentUrl commentUrl = await FindOneAsync(lambda);
return MappingManager.Map(commentUrl);
}
private Expression<Func<CommentUrl, bool>> Cast(Expression<Func<CommentUrlCommon, bool>> predicate)
{
Expression converted= Expression.Convert(predicate, typeof (Expression<Func<CommentUrl, bool>>));
return Expression.Lambda<Func<CommentUrl, bool>>
(converted, predicate.Parameters);
}
}
When I hit the Cast function, I get the following error:
The coercion operator is not defined between the types "System.Func 2[CommentUrlCommon,System.Boolean]' and 'System.Linq.Expressions.Expression1 [System.Func`2 [CommentUrl, System.Boolean]]".
How can I assign this value to an expression?
source
share