EF中的主键最大值

时间:2013-08-16 17:31:27

标签: c# .net entity-framework linq-to-entities dynamicquery

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

public TEntity Find(params object[] keyValues);

我正在寻找类似的东西:

public object PkMax<TEntity>();//which returns max of pk column

更新

我正在寻找基于实体pk的动态linq查询,目前我知道如何通过这个SO答案获得pk:How to get the Primary Key(s) in Entity Framework 4.1, i.e. using DbContext

1 个答案:

答案 0 :(得分:1)

您需要手动构建表达式,以便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;
}