【问题标题】:How do I set a variable based on specific element from database call?如何根据数据库调用中的特定元素设置变量?
【发布时间】:2012-10-25 21:56:48
【问题描述】:

好的,我会以我是 c# 新手和使用 WebMatrix 的事实作为开头。我正在尝试将数据库调用作为页面的一部分并获取特定于“类别”的信息,然后使用数据库中的数据将信息放在页面上 - 例如,将页面标题设置为来自的 CategoryTitle数据库。下面是我的示例代码,我知道我只是不明白一些东西,但基本上我从数据库中获取数据(其中包括一堆关于类别的东西,比如;id、标题、描述等)到 IEnumerable(我不完全理解那是什么)然后我只想引用 CategoryTitle (这是数据库和结果集中的字段名称。当我使用下面的代码时,我收到以下错误“编译器错误消息: CS1061:“System.Collections.Generic.IEnumerable”不包含“CategoryTitle”的定义,并且找不到接受“System.Collections.Generic.IEnumerable”类型的第一个参数的扩展方法“CategoryTitle”(您是否缺少使用指令还是程序集引用?)”

我知道“categoryData.CategoryTitle;”部分是错误的,但我该怎么做?我可以使用foreach循环并执行“foreach(categoryData中的var row)”然后说“row.CategoryData”让它工作,但我觉得我不应该这样做,因为它只有一个记录结果设置。

@{

    Layout = "~/layouts/_layout.cshtml";

    var categoryID = 1;
    IEnumerable<dynamic> categoryData = null;

    var db = Database.Open("Connection"); 
    categoryData = db.Query("exec sp_get_Category @CategoryID=" + categoryID);

    Page.Title = categoryData.CategoryTitle;

}

【问题讨论】:

    标签: c# ienumerable resultset


    【解决方案1】:

    您必须只取出一行,否则您会尝试从集合中取出一个属性。试试

    Page.Title = categoryData.First().CategoryTitle;
    

    它只会提取第一个结果,但如果没有结果,你会得到一个异常。或者,您可以执行 FirstOrDefault() ,它将首先返回或返回 null;然后你可以做一个空检查。

    var firstValue = categoryData.FirstOrDefault();
    if(firstValue == null)
    {
        Page.Title = "Some default title":
    }
    else
    {
        Page.Title = firstValue;
    }
    

    【讨论】:

    • 谢谢 - 我使用了第一个解决方案,因为尽管我在示例中包含了标题,但我实际上希望获取几条信息并将其放入变量中。它对我来说非常有效!
    猜你喜欢
    • 2018-12-09
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    相关资源
    最近更新 更多