我试图创建一个通用函数,让我们将其称为GetUpperBoundary,它将获得给定属性名称的等效值或下一个最大值,在此示例中为Temperature。 (我计划创建一些与此类似的函数,因为我将在存储库类之间进行很多内插。)我的存储库MaterialRepository继承自下面的基类。我假设该函数将具有3个参数:TEntity,属性名称和双精度值。我希望这种方法可以搜索“ _entity”,并如上所述为我提供等效或下一个最大温度值。
//Generic repository base class
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
protected readonly DbContext Context;
private readonly DbSet<TEntity> _entity;
public Repository(DbContext context)
{
Context = context;
_entity = Context.Set<TEntity>();
}
//Other functions not shown
}
我的函数的开始看起来像这样:
public double GetUpperBoundary(TEntity entity, string property, double value)
{
//Check if the entity has the property name
var prop = entity.GetType().GetProperty(property);
//Add error handling later
//Area of struggle
var theList = _entity.Select(m =>m.GetType().GetProperty(property).GetValue(object?).ToList();
return 0; //return desired value
}
将注释部分视为“斗争领域”,我无法弄清楚如何获得GetValue中显示的价值。在GetValue()中输入的对象似乎没有任何作用,因此我想知道错误是否在于linq无法将通用代码转换为基于SQL的内容,或者是否需要将表达式作为参数传递。非常感谢您的专业知识和帮助!