如何根据数据库调用中的特定元素设置变量?

时间:2012-11-06 00:35:58

标签: c# ienumerable resultset

好的,我将在此之前说明我是c#的新手并使用WebMatrix。我正在尝试作为页面的一部分进行数据库调用并获取特定于“类别”的信息,然后使用数据库中的数据将信息放在页面上 - 包括例如,将页面标题设置为来自的类别标题数据库。下面是我的示例代码,我知道我只是不理解某些东西,但基本上我从数据库中获取数据(其中包含一些关于类别的内容,如id,标题,描述等)到IEnumerable(我的不完全理解那是什么)然后我只想引用CategoryTitle(这是数据库和结果集中字段的名称。当我使用下面的代码时,我得到以下错误“编译器错误消息: CS1061:'System.Collections.Generic.IEnumerable'不包含'CategoryTitle'的定义,并且没有可以找到接受类型'System.Collections.Generic.IEnumerable'的第一个参数的扩展方法'CategoryTitle'(你错过了吗?使用指令或汇编引用?)“

我知道“categoryData.CategoryTitle;”部分是错误的,但我该如何做我想做的事情?我可以使用foreach循环并使用“foreach(varData in categoryData)”然后说“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;

}

1 个答案:

答案 0 :(得分:0)

你必须只出一行,否则你试图从一个集合中获取一个属性。试试

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

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

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