首页 文章

为什么这个cshtml会导致编译错误? (CS1061)

提问于
浏览
0
@{
    Page.Title = "Book a showing";
    var db = Database.Open("calcinema");
    var f = db.Query("SELECT * FROM Film WHERE FilmID = 1;").ToList();
}

<html>
    <p> @f.Title </p>
</html>

被突出显示为错误的行是

@ f.Title

如果您无法从代码中看到我想要做什么 - 基本上有一个名为Film的数据库表,每个电影都有一个ID . 我只是想用FilmID = 1来显示电影的 Headers (这个电影存在,当我在webmatrix的数据库部分运行查询时,我得到了正确的结果) . 我做错了什么?

3 回答

  • 1

    如果将 Query 方法与数据库帮助程序一起使用,则会获得一组动态对象作为回报 . 如果只想返回一行,则应使用 QuerySingle 方法,而不是返回单个动态对象:

    @{
        Page.Title = "Book a showing";
        var db = Database.Open("calcinema");
        var f = db.QuerySingle("SELECT * FROM Film WHERE FilmID = 1;");
    }
    
    <html>
        <p> @f.Title </p>
    </html>
    

    您可以在此处阅读有关数据库帮助程序方法的更多信息:http://www.asp.net/web-pages/tutorials/data/5-working-with-data,我已在此处详细介绍了这些方法及其返回类型:http://www.mikesdotnetting.com/Article/214/How-To-Check-If-A-Query-Returns-Data-In-ASP.NET-Web-Pages

  • 0

    f 将成为某些动态类型匿名类型的列表 . 它不会有 Title 属性 . 您要么考虑在cshtml中嵌入 Page.Title ,要么迭代列表中的每个结果并为每个元素写一个 <p /> .

    您也可以使用 QuerySingle Single来获取电影(我根据您根据ID查询的事实选择单一,并且查询应该返回一个结果):

    var f = db.QuerySingle("Select * from film where filmid = 1");
    
  • 1

    我同意以下答案 . 您可以使用foreach输出列表中的所有 Headers . 但是目前您正在尝试选择列表中不存在的属性 .

    foreach(var film in f) 
    {
       <p> @f.Title </p>
    }
    

    这将起作用,否则尝试使用

    var f = db.Query("Select * from film where filmid = 1").SingleOrDefault();
    

    我个人会使用SingleOrDefault,因为它通常“更安全” .

相关问题