【发布时间】:2020-01-22 22:11:56
【问题描述】:
大家好,我正在尝试使用 where 类通过将参数传递给如下方法来过滤表,
private IQueryable<SpaceFunctionType> Get<TEntity>(Expression<Func<TEntity, bool>> predicate) where TEntity : class, ICategorySpaceFunction
{
return _dbContext.Set<TEntity>().Where(predicate)
.Select(c => new SpaceFunctionType
{
Category = c.Category,
SpaceFunction = c.SpaceFunction
});
}
public IQueryable<SpaceFunctionType> GetSpaceFunctionType(string environmentSource)
{
return Get<LibraryEnvironment>(x => x.EnvironmentSource.Name == environmentSource).AsQueryable();
}
这些是界面细节,
public interface ICategorySpaceFunction
{
public string Category { get; set; }
public string SpaceFunction { get; set; }
}
这将是类名
public class SpaceFunctionType : ICategorySpaceFunction
{
public string Category { get; set; }
public string SpaceFunction { get; set; }
}
但在Get<LibraryEnvironment> 出现错误,如下所示
不能使用“API.DesignHub.Entities.LibraryEnvironment”类型 作为泛型类型或方法中的类型参数“TEntity” 'Query.Get(表达式>)'。没有 隐式引用转换 'API.DesignHub.Entities.LibraryEnvironment' 到 'API.DesignHub.Entities.ICategorySpaceFunction'
我不确定上述方法在哪里做错了,任何人都可以就此提出任何想法,非常感谢我,
在此先感谢
【问题讨论】:
-
需要minimal reproducible example,但看起来
LibraryEnvironment不是ICategorySpaceFunction错误所说... -
是的,两者都不同,我刚刚更新了我的问题
-
错误就是它正在发生的事情。但是那里使用的语言有点通用。它的意思是
LibraryEnvironment没有实现ICategorySpaceFunction。TEntity是ICategorySpaceFunction的一个类型,而你在调用时发送LibraryEnvironment,所以LibraryEnvironment应该类似于TEntity,这是ICategorySpaceFunction的一个实现。更多细节 - docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
标签: c# .net list entity-framework generics