2016-04-30 163 views
1

我怎樣才能從我的數據庫中得到最新的「id」,並將其放入文本框 注意:我必須從我的數據庫中返回最新的id。如何從LINQ C#中的數據庫中獲取數據?

看看這個方法:

public void refresh() 
{ 
    var query = from qc in db.tbl_viewClients select qc.id ; 
    int a = Convert.ToInt32(query.SingleOrDefault().ToString()); 
    txt_id.Text = Convert.ToString(a); 
} 
+0

您能否提供更多信息。什麼是表結構。 –

+0

你確定你想要'最高數字',而不是你剛纔插入的行的ID嗎?因爲否則併發會導致麻煩。而且效率很低。 –

+0

ID或密鑰並不意味着在用戶界面中顯示特定數據庫生成的值。不能指望多個用戶看到相同的頂級ID,並讓他們認爲他們會在他們的交易中獲得頂級ID + 1的價值。 –

回答

2

由於Max會丟InvalidOperationException,所以您應該處理沒有記錄。

var query = from qc in db.tbl_viewClients select qc.id; 
if (query.Any()) 
{ 
    var max = query.Max(); 
    txt_id.Text = max.ToString(); 
    // do rest of work 
} 
else 
{ 
    //handle the case when you have no record 
} 

但這種方法枚舉查詢兩次!
這是一個竅門!

var query = from qc in db.tbl_viewClients select (int?)qc.id; 
var max = query.Max(); 
if (max.HasValue) 
{ 
    txt_id.Text = max.ToString(); 
    // do rest of work 
} 
else 
{ 
    //handle the case when you have no record 
} 
1

假設id存儲爲int和最新意味着最大的ID,你可以簡單地使用Max() *:

int a = query.DefaultIfEmpty(0).Max(); 

否則,信息確定最新,如創建日期,從問題中缺失。

*)加DefaultIfEmpty(0)返回0如果query返回沒有結果。

+0

如果所有的id都小於零怎麼辦? – dotctor

+1

@dotctor ['DefaultIfEmpty()'](https://msdn.microsoft.com/en-us/library/bb360179%28v=vs.100%29.aspx)僅影響結果*以防'query'返回沒有結果*,表示如果表中沒有任何標識。否則,只有實際的ID被考慮在內。 – har07

+0

我錯了。事實上,我腦中出現了一些問題,我用一種不好的方式解釋了它。當結果爲'0'時,這種方法的問題是最大的'id'或表中沒有記錄。 – dotctor

1

請嘗試此操作。

var query = from t in table orderby t.Id descending 
        select t.Id; 

object result = query.FirstOrDefault(); 

希望有所幫助。

1

如果你正在嘗試做我認爲你自己的東西(插入一些東西到數據庫中,然後查詢它以找到你認爲是剛剛插入的ID),然後停下來!這樣做不會確保您檢索的ID是您需要的ID,因爲您的數據庫可以隨時由其他人更改(併發性)。但是,考慮到這只是一個測試,只是你是誰使用它,你需要知道你剛插入的ID,那麼這樣做的方法是:

假設你使用LINQtoSQL或實體框架,當你添加一個對象到上下文並調用SaveChanges(),緊接着這個對象將會填充它的ID(或主鍵)字段。請檢查!