如何将执行查询的结果放入 ViewData 并传递给视图

Posted

技术标签:

【中文标题】如何将执行查询的结果放入 ViewData 并传递给视图【英文标题】:How to put the result of executing a query into ViewData and pass to a view 【发布时间】:2013-05-16 03:17:50 【问题描述】:

我还是 ASP.net MVC 的新手,在查询时显示数据时遇到问题。

这是我运行查询的控制器:

public ActionResult Create()

    var Status = from s in _db.ReservationsStatus where s.defaultStatus == true select  s.Id;

    ViewData["Status"] = Status;
    return View();

然后我在我的视图中读取 ViewData。但是,输出是:

SELECT [Extent1].[Id] AS [Id] FROM [dbo].[ReservationStatus] AS [Extent1] WHERE 1 = [Extent1].[defaultStatus];

我想要的输出是 ID 本身(执行查询的结果)。

【问题讨论】:

您在视图中使用什么代码来显示数据? 我使用了变量var x = ViewData["Status"] 然后@x 我想您需要强制评估查询(可能是Status.First()?) 说真的,它只花了那个!?我刚刚添加了它并且它有效!,我真的缺乏关于asp.net mvc的知识,谢谢! 这实际上不是 MVC 的东西 - 更多的是 Linq/EF 的东西。 【参考方案1】:

您需要执行查询。

public ActionResult Create()

    var Status = (from s in _db.ReservationsStatus where s.defaultStatus == true select  s.Id).First();

    ViewData["Status"] = Status;
    return View();

【讨论】:

【参考方案2】:

LINQ 查询以两种模式执行 - 延迟和立即。在您提到的情况下,它是延迟执行,因此查询被分配给 var 直到它被执行。这将在您开始遍历结果时发生。您可以通过调用诸如 First 或 count 之类的东西来使查询立即执行,这将强制查询执行并返回一个值。

【讨论】:

我还出于另一个原因使用了 count 方法并且查询有效,我只是缺乏关于 Linq 及其方法的知识。我不知道使用 First() 执行查询。

以上是关于如何将执行查询的结果放入 ViewData 并传递给视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将查询结果集从主报表传递到子报表

如何将 SQL 结果放入 VBA 中的变量中

如何在 PLSQL 中存储立即执行的结果?

将额外的 ViewData 传递给强类型的局部视图

如何将 MySQL 查询结果放入 ArrayList<object>

sql查询出来的结果,如何放入数组中