2011-01-13 15 views
1

dbからデータを取得している間、私は間違って何をしているのか知っていますか?asp.net - linq to SQLの簡単な質問

私は次のコード

  var a = from p in db.test3s 
        where p.ID == '1' 
        select p.PostID; 

      ViewData["a"] = a; 

を持っており、.aspxのファイルにViewDataを[ "A"]は私にこの示しています。代わりに、(一部の)整数の...

SELECT [t0].[PostID] FROM [dbo].[test3] AS [t0] WHERE [t0].[ID] = @p0 

を数。

答えて

4

私は、ViewDataとは何かを知っておく必要がありますが、Linq to SQLクエリは、変数に割り当てた直後に実行されないことを認識しておく必要があります。これは遅延読み込みと呼ばれ、データを操作しようとするときにデータを保持することを意味します(結果や結果を繰り返し処理するときなど)。何をしたい

は次のとおりです。

var a = (from p in db.test3s 
     where p.ID == '1' 
     select p.PostID).First(); 

これはあなたの最初の結果を取得します。結果のセットを取得したい場合は、ToList()、ToArray()などを呼び出すことができます。

3

あなたは値が利用可能になる前に、結果を反復処理する必要が

if(a.Any()) 
    ViewData["a"] = a.First(); 
3

を試してみてください。 Linq2Sqlはあなたのクエリが1行しか返さないことを知りません。だから、代わりにこれを行うことができます:PostIDの値は、あなたのビューデータに割り当てられている唯一の結果、およびということがあることを確認します

ViewData["a"] = db.test3s.First(t => t.Id == 1).PostID; 

を。

2

例ではaIQueryable<Int32>です。それはlike a list of itemsです(しかし、実行が遅れています)。 First()FirstOrDefault()Single()SingleOrDefault()など(具体的な状況で必要なものによって異なる)の具体的な項目を取得する必要があります