C# Linq表达式:使用通用数据库集创建max查询

C# Linq表达式:使用通用数据库集创建max查询,c#,entity-framework,lambda,generic-programming,dbset,C#,Entity Framework,Lambda,Generic Programming,Dbset,为了简化为单元测试创建假数据的过程,我希望有一个可以创建通用实体的函数(我将其用作许多其他类的底层对象)。实体有一个索引,为了生成一个新的索引,我只想找到当前最大的数字并添加一个 我正在为许多其他类使用索引,并希望使此函数尽可能通用。我的问题是,我不知道如何在我的通用函数GetMaxID中指定要使用的DbSet 到目前为止,我得到的是: private Entity CreateGenericEntity() { return new Entity() { Gui

为了简化为单元测试创建假数据的过程,我希望有一个可以创建通用实体的函数(我将其用作许多其他类的底层对象)。实体有一个索引,为了生成一个新的索引,我只想找到当前最大的数字并添加一个

我正在为许多其他类使用索引,并希望使此函数尽可能通用。我的问题是,我不知道如何在我的通用函数
GetMaxID
中指定要使用的DbSet

到目前为止,我得到的是:

private Entity CreateGenericEntity()
{
    return new Entity()
    {
        Guid = Guid.NewGuid(),
        Index = GetMaxID<Entity>(x => x.Index) + 1,
    };
}

private int GetMaxID<TEntity>(Expression<Func<TEntity, int>> expression)
{
    return _repository.Set<TEntity>().Max(expression);
}

等等。

我发现我缺少tenty声明,该声明通过在函数中添加
where tenty:class
来修复。我还必须将表达式更改为accept
int?
,以处理查询返回空值的情况。完整的函数如下所示(如果有人感兴趣)

private int GetMaxID(表达式),其中tenty:class
{
返回_repository.Set().Max(表达式)??0;
}
public IDbSet<Customers> Customers{ get; set; }

public IDbSet<Orders> Orders{ get; set; }
private int GetMaxID<TEntity>(Expression<Func<TEntity, int?>> expression) where TEntity : class
{
    return _repository.Set<TEntity>().Max(expression) ?? 0;
}