2011-07-11 7 views
0

LINQPadのStudentIDを更新していない理由を教えてもらえますか?LINQを使用してテーブルを更新する

var studentsList = Students.Select(t => t); 

int newStudentID = 10001; 
foreach(Student s in studentsList) 
{  
    s.StudentID = newStudentID;    
    newStudentID = newStudentID + 1; 
} 

SubmitChanges(); 

ありがとう!

+0

'StudentID'はテーブルの主キーですか? – Yakimych

+0

私は、シーケンシャル番号を読み込んだ後に、StudentIDをプライマリキーにしたいと思っていました。質問に答えるために、いいえ、このクエリを実行したときに主キーではありませんでした。 – rk1962

答えて

0

わからない。私はあなたが与えたスニペットを使ってこれをテストするコードを書こうとしましたが、それはLinqPadでコンパイルされます。ここで私が使用したものです:

public class Student 
{ 
    public string name; 
    public int StudentId; 
} 

void Main() 
{ 
    Student[] Students = 
    new Student[] 
     { 
      new Student { name="a", StudentId = 0}, 
      new Student { name="b", StudentId = 0}, 
      new Student { name="c", StudentId = 0}, 
      new Student { name="d", StudentId = 0} 
     }; 

    var studentsList = Students.Select(t => t); 

    int newStudentID = 10001; 
    foreach(var s in studentsList) 
    {  
     s.StudentId = newStudentID;    
     newStudentID = newStudentID + 1; 
    } 

    foreach(var s in studentsList) 
    {  
     System.Console.WriteLine(s.name + ": " + s.StudentId.ToString()); 
    } 
} 

、ここでは、出力された:

a: 10001 
b: 10002 
c: 10003 
d: 10004 

そのくらいはOK働いていたようなので、それが見えます。あなたのコードの実行例を得るのに十分なコンテキストを与えることができれば、私はそれをさらにチェックアウトすることができます。

+0

ご連絡ありがとうございます。 "SubmitChanges"を呼び出す前にstudentsListをダンプすると、正しい更新値が表示されます。この問題を研究しているうちに、どのように簡単にできるかという記事を見つけました。私は私の発見を掲載する。再度、感謝します! – rk1962

+0

私はなぜLinqPadで動作しないのか分かりませんが、この記事ではsinleのUpdate文でテーブルを更新するのに役立ちました:http://www.sqlteam.com/article/creating-a-sequential-record-number -フィールド。次のクエリは、すべての行を正しく更新しました。declare @intCounter int set @intCounter = 10000 update Student SET @intCounter = StudentID = @intCounter + 1 – rk1962

+0

あなたの問題は解決しました。 :) – shelleybutterfly

関連する問題