EF DbContext有一个
.Set<TDomain>()
方法返回基于类型的对象集。你可以直接写-
public IQueryable<SpaceFunctionType> Get<TDomain>(string airFlowSource) where TDomain: IA
{
return _dbContext.Set<TDomain>().Where(s => s.EquipmentSourceName == airFlowSource)
.Select(c => new SpaceFunctionType
{
Category = c.Category,
SpaceFunction = c.SpaceFunction
});
}
现在要添加通用功能,请添加一个接口-
public interface IA {
... AirflowSourceName
}
从接口派生-
public class A170: IA
{}
public class A621 : IA
{}
public class Equipments: IA
{}
更多细节
https://docs.microsoft.com/en-us/dotnet/api/system.data.entity.dbcontext.set?view=entity-framework-6.2.0
使现代化
因为它们是不同的属性。可以注入表达式lambda来进行比较-
public IQueryable<SpaceFunctionType> Get<TDomain>(Expression<Func<TDomain, bool>> predicate) where TDomain: IA
{
return _dbContext.Set<TDomain>().Where(predicate)
.Select(c => new SpaceFunctionType
{
Category = c.Category,
SpaceFunction = c.SpaceFunction
});
}
像这样打电话-
.Get<A70>(x => x.AirflowSourceName == "forcename");
或
.Get<Equipments>(x => x.EquipmentSourceName == "forcename");
更新2
该界面需要根据需要进行更新-
public interface IA {
... Category
... SpaceFunction
}
没有这一点,世界
Select
子句将不知道有这样的名称的属性,但由于这些名称对所有人都是通用的,所以将它们添加到接口中应该不会有问题。。