2011-01-13 56 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()等(取决于您在具体情况下需要的)