2013-12-15 21 views
0

我使用實體框架5和我需要在餐桌旁ID喜歡獲取下一個pPrimary與lambda表達式密鑰ID

1 
2 
3 
4 

我想下一個ID,當我的ID是1想得到next id 2

public class Level 
{ 
    [Key] 
    public int LevelID { get; set; } 
    public string Name { get; set; } 
    public double Cost { get; set; } 
    public int Statue { get; set; } 
    public int CourseID { get; set; } 
    public int? SessionCount { get; set; } 
    public int? SessionAttend { get; set; } 
    public DateTime? DateAdded { get; set; } 
    public Guid UserAddID { get; set; } 
    public Guid userEditID { get; set; } 
    public DateTime DateUpdated { get; set; } 
    public bool DelFlag { get; set; } 
    public DateTime? DelDate { get; set; } 
    public Guid? UserDelID { get; set; } 

} 

感謝您的幫助。

+2

爲什麼你需要下一個主鍵?它應該由您的數據庫分配。 –

+0

在我的應用程序中想要將羣組移動到下一個層次 –

+0

您需要知道什麼 - 表中最高的ID,來自當前的下一個最高ID,還是其他?你有什麼嘗試? –

回答

0
public int getNextId(int id) 
{ 
    var nextEntities = repository.Query<Levels>().OrderBy(d=>d.LevelId) 
    .Where(l=>l.LevelId>id) 
    .Take(1).SingleOrDefault(); 
    return nextEntities != null ? nextEntities.LevelId : ++id; //or return 0 on your choice 
} 
+0

再說一遍:警告詞:這是**高度可疑**來產生重複值,這對於主鍵來說絕對是NO-NO!這只是不能在代碼中正確處理 - 這需要在數據庫級別完成! –

+0

不知道作者將如何使用此代碼。也許是在當前之後找到新的記錄ID或找到現有的實體 –

0

獲得下一個LevelId將被分配給新行,你可能會使用這樣的:

var nextId = db.Levels.OrderBy(x => x.LevelId).Last().LevelId + 1; 

我可能不會推薦這雖然。整個想法給我帶來了糟糕的代碼味道。

+0

請注意:這種方法**非常容易產生重複值,這對主鍵來說不是一個好主意! –

+1

不能同意更多。 –