2013-08-16 41 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