C# EF中主键的最大值

C# EF中主键的最大值,c#,.net,entity-framework,linq-to-entities,dynamicquery,C#,.net,Entity Framework,Linq To Entities,Dynamicquery,是否可以使用EF获得pk列的最大值?我的意思是找方法 根据pk值获取实体,我们已经有了: public TEntity Find(params object[] keyValues); 我要找的东西是: public object PkMax<TEntity>();//which returns max of pk column 公共对象PkMax()//返回pk列的最大值 更新: 我正在寻找基于实体pk的动态linq查询,目前我知道如何获得pk,这要归功于这样的答案:您需要手

是否可以使用EF获得pk列的最大值?我的意思是找方法 根据pk值获取实体,我们已经有了:

public TEntity Find(params object[] keyValues);
我要找的东西是:

public object PkMax<TEntity>();//which returns max of pk column
公共对象PkMax()//返回pk列的最大值
更新:


我正在寻找基于实体pk的动态linq查询,目前我知道如何获得pk,这要归功于这样的答案:

您需要手动构建表达式,以便linq to Entities可以为您将其转换为SQL。由于您说可以获取PK属性的字符串名称,因此可以使用如下扩展方法:

public int GetMaxPK<T>(this IQueryable<T> query, string pkPropertyName)
{
    // TODO: add argument checks
    var parameter = Expression.Parameter(typeof(T));
    var body = Expression.Property(parameter, pkPropertyName);
    var lambda = Expression.Lambda<Func<T,int>>(body, parameter);
    var result = query.Max (lambda);
    return result;
}
public int GetMaxPK(此IQueryable查询,字符串pkPropertyName)
{
//TODO:添加参数检查
var参数=表达式参数(typeof(T));
var body=Expression.Property(参数pkPropertyName);
var lambda=表达式.lambda(主体,参数);
var result=query.Max(λ);
返回结果;
}

您可以使用复合PK吗?这是可能的,但目前一个与单个PK一起工作的解决方案就足够了。感觉您可能在尝试其他操作—获取行数,获取生成的最后一个标识,类似的操作?你不能简单地使用
Max
函数吗?我需要为几个表生成标识,我不能简单地为pk列设置标识规范,所以我必须用另一种方法来完成,我正在考虑在我的基本存储库中实现这种方法。