2011-01-13 114 views
1

有沒有人知道我在做什麼錯誤,而從數據庫中獲取數據。asp.net -linq to sql簡單問題

我有以下代碼

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

      ViewData["a"] = a; 

而且在.aspx文件的計算機[ 「一」]可見我:

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

...而不是一個(一些)整數數。

回答

4

我不知道,ViewData是什麼,但你需要知道,Linq到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不知道你的查詢將只返回一行(儘管你可能知道這一點)。所以,你可以這樣做,而不是:

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

這將確保只有一個結果,那的PostID值分配給您的視圖的數據。

2

在您的示例中a的類型爲IQueryable<Int32>。這是like a list of items(但延遲執行)。您應該使用一些選擇器檢索具體項目:First(),FirstOrDefault(),Single(), SingleOrDefault()等(取決於您在具體情況下需要的)