运行db query IF querystring not null c#razor

时间:2013-03-24 11:34:19

标签: asp.net request.querystring

我是C#Razor的新手,我想运行一个非常简单的过程 - 基本上我想运行一个新闻页面。如果页面链接包含ID,我希望页面根据该值查询数据库,例如:

var newsID = Request.QueryString["ID"];     
var datanewsitem = db.QuerySingle("SELECT * FROM News WHERE ID=@0", newsID);

如果没有值,我希望它选择表中的顶级记录,如下所示:

var datanewsitem = db.QuerySingle("SELECT Top 1 ID, Title, Date, Text
FROM news ORDER BY ID desc");

我正在尝试执行这样的检查:

if (Request.QueryString["ID"] != null) {
var newsID = Request.QueryString["ID"];    
var datanewsitem = db.QuerySingle("SELECT * FROM News WHERE ID=@0", newsID);        
}else{<br />
var datanewsitem = db.QuerySingle("SELECT Top 1 ID, Title, Date, Text, FROM news ORDER BY ID desc");}

但是,只要我尝试从IF语句中执行查询,编译器就会在我尝试调用它时告诉我datanewsitem.variable没有定义。

这可能是我理解C#如何工作的一个根本缺陷,但是有人可以为我提供解决方案(有一个例子)吗?这让我疯了!

1 个答案:

答案 0 :(得分:0)

这很容易解决。

您在datanewsitemif条款中分别定义了else变量两次。这意味着它只在它所属的子句中定义(称为变量的“范围”。)

更改为:

myNewsType datanewsitem = null;
if (Request.QueryString["ID"] != null) {
   newsID = Request.QueryString["ID"];    
   datanewsitem = db.QuerySingle("SELECT * FROM News WHERE ID=@0", newsID);        
}else{<br />
   datanewsitem = db.QuerySingle("SELECT Top 1 ID, Title, Date, Text, FROM news ORDER BY ID desc");}

...其中myNewsTypedatanewsitem的类型名称。