0

对不起,我是 C# 的新手。我正在做一个基本的在线课程,并且我已经修改了其中一个示例中的代码,因为我正在尝试编写一个程序,该程序可以显示特定类型的电影列表,其中标题包含给定的字符串。

当我尝试在浏览器上启动应用程序时收到以下错误消息:

编译器错误消息:CS0136:无法在此范围内声明名为“selectedData”的局部变量,因为它会给“selectedData”赋予不同的含义,“selectedData”已在“父级或当前”范围内用于表示其他内容

==================================================== ================

源错误:

第 12 行:searchGenreS = Request.QueryString["searchGenre"]; 第 13 行:searchTitleS = "%" + Request["searchTitle"] + "%"; 第 14 行: var selectedData = db.Query(selectCommand, searchGenreS, searchTitleS); 第 15 行:
第 16 行:}

源文件:c:\Users\Charles\Documents\My Web Sites\WebPagesMovies\MoviesCombinedQuery.cshtml 行:14

这是代码:

@{
var db = Database.Open("WebPagesMovies") ;
var selectCommand = "SELECT * FROM Movies";
var searchTerm = "";
var searchGenreS = "";
var searchTitleS = "";
var selectedData = "";

if((!Request.QueryString["searchGenre"].IsEmpty() ) && (!Request.QueryString["searchTitle"].IsEmpty()  ) )
{
    selectCommand = "SELECT * FROM Movies WHERE Genre = @0 AND Title LIKE @1";
    searchGenreS = Request.QueryString["searchGenre"];
    searchTitleS = "%" + Request["searchTitle"] + "%";
    var selectedData = db.Query(selectCommand, searchGenreS, searchTitleS);

}
else
{
  if(!Request.QueryString["searchGenre"].IsEmpty() )
   {
    selectCommand = "SELECT * FROM Movies WHERE Genre = @0";
    searchTerm = Request.QueryString["searchGenre"];
   }

  if(!Request.QueryString["searchTitle"].IsEmpty() ) 
   {
    selectCommand = "SELECT * FROM Movies WHERE Title LIKE @0";
    searchTerm = "%" + Request["searchTitle"] + "%";
   }

  var selectedData = db.Query(selectCommand, searchTerm);

}   
 var grid = new WebGrid(source: selectedData, defaultSort: "Genre", rowsPerPage:3);

}

谁能帮我??

谢谢!!

干杯!!

4

4 回答 4

2

selectedDataifelse正文中重新声明。你不想那样做——你之前已经声明了变量。您只需要将这些语句更改为对现有变量的赋值所以这:

var selectedData = db.Query(selectCommand, searchGenreS, searchTitleS);

变成:

selectedData = db.Query(selectCommand, searchGenreS, searchTitleS);

和这个:

var selectedData = db.Query(selectCommand, searchTerm);

变成:

selectedData = db.Query(selectCommand, searchTerm);

我强烈怀疑你需要改变的类型selectedData虽然 - 目前它是一个给定初始值的字符串 - 是否也db.Query返回 a string?这对我来说似乎不太可能。

编辑:如前所述,看起来你只需要selectedData像这样贴花:

IEnumerable<dynamic> selectedData = null;
于 2013-10-24T19:31:24.290 回答
0

改变

 var selectedData = db.Query(selectCommand, searchTerm);

 selectedData = db.Query(selectCommand, searchTerm);

您正在重新声明它,这是您不想/不能做的。

于 2013-10-24T19:30:34.113 回答
0

感谢大家解决VAR问题..

至于如何修复 selectData 的 TYPE,这成功了:

IEnumerable selectedData = null;

干杯!!

于 2013-10-24T20:16:31.787 回答
0

selectedData从分支代码中删除 var

var selectedData = "";

if((!Request.QueryString["searchGenre"].IsEmpty() ) && (!Request.QueryString["searchTitle"].IsEmpty()  ) )
{
    selectCommand = "SELECT * FROM Movies WHERE Genre = @0 AND Title LIKE @1";
    searchGenreS = Request.QueryString["searchGenre"];
    searchTitleS = "%" + Request["searchTitle"] + "%";
    selectedData = db.Query(selectCommand, searchGenreS, searchTitleS);
}
else
{
    ....
 if(!Request.QueryString["searchTitle"].IsEmpty() ) 
   {
    selectCommand = "SELECT * FROM Movies WHERE Title LIKE @0";
    searchTerm = "%" + Request["searchTitle"] + "%";
   }

  selectedData = db.Query(selectCommand, searchTerm);

}   

当前代码正在做的是实例化一个名为的变量selectedData并将其设置为“”,然后您尝试重新实例化一个与db.Query....

于 2013-10-24T19:30:10.063 回答