2013-08-16 36 views
2

使用EF值可以获得pk列的最大值吗?我的意思是这样find方法 系统会根据PK值的实体,我们已经有了这样的:EF中的主键最大值

public TEntity Find(params object[] keyValues); 

我在寻找类似:

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

更新:

我'寻找基于实体的PK的动态LINQ查询,目前我知道如何得到PK感谢这样回答:How to get the Primary Key(s) in Entity Framework 4.1, i.e. using DbContext

+0

你可以有复合PK? –

+0

这是可能的,但目前与单个PK一起工作的解决方案就足够了。 – VahidNaderi

+0

感觉就像你可能试图做其他事情一样 - 获得行数,得到最后生成的身份,类似的东西?你不能简单地使用'Max'函数吗? –

回答

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; 
} 
+0

这就是我想要的,非常感谢。 – VahidNaderi