【问题标题】:Linq Expressions: Create a max query using a generic DbSetLinq 表达式:使用通用 DbSet 创建最大查询
【发布时间】:2012-08-06 20:33:41
【问题描述】:

为了简化为单元测试创​​建假数据,我想要一个可以创建通用实体的函数(我将其用作许多其他类的基础对象)。该实体有一个索引,为了生成一个新索引,我想简单地找到当前最高的数字并加一个。

我在很多其他类中使用 Index,并且希望使这个函数尽可能通用。 我的问题是我不知道如何在我的通用函数中指定要使用的 DbSet GetMaxID

这是我目前得到的:

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);
}

_repository有一堆不同的IDbSets属性,比如

public IDbSet<Customers> Customers{ get; set; }

public IDbSet<Orders> Orders{ get; set; }

等等

【问题讨论】:

    标签: c# entity-framework lambda generic-programming dbset


    【解决方案1】:

    我发现我错过了 TEntity 的声明,这是通过将 where TEntity : class 附加到我的函数来修复的。我还必须更改表达式以接受 int? 以处理查询返回空值的情况。完整的功能是这样的(如果有人感兴趣的话)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 2019-11-15
      • 2019-03-31
      相关资源
      最近更新 更多