2016-04-30 12 views
1

は、どのように私は私のデータベースから最新の「ID」を取得し、テキストボックス ノートでこれを置くことができます:私は私のデータベースから最新のIDを返すことがあります。この方法でデータベースからLINQ C#のデータを取得するにはどうすればよいですか?

見て:、そうでない場合

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

情報を:

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

MaxInvalidOperationExceptionをスローしますので、あなたは何のレコードを持っていないときは、処理する必要があります。

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 
} 

しかし、このアプローチでは、クエリを2回列挙しています。
ここでトリックです!

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() *を使用することができることを意味すると仮定すると最新、など作成日を決定するためには、質問にはありません。

*)は、を返します。0を返すようにDefaultIfEmpty(0)を追加しました。

+0

すべてのIDが0より小さい場合はどうなりますか? – dotctor

+1

@dotctor [ 'DefaultIfEmpty()'](https://msdn.microsoft.com/en-us/library/bb360179%28v=vs.100%29.aspxは)のみの場合 'query'リターンで*結果に影響を与えますテーブルにidがまったくない場合を意味する*結果はありません。それ以外の場合は、実際の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を知る必要があります。

LINQtoSQLまたはEntity Frameworkを使用すると仮定すると、コンテキストのオブジェクトを返し、SaveChanges()を呼び出すと、その直後にそのオブジェクトのID(または主キー)フィールドが設定されます。ちょうどチェック!

関連する問題