通用存储库功能

时间:2019-08-23 20:49:13

标签: c# entity-framework lambda

我试图创建一个通用函数,让我们将其称为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的内容,或者是否需要将表达式作为参数传递。非常感谢您的专业知识和帮助!

0 个答案:

没有答案