2013-10-24 28 views
0

对不起,我是C#上的新手。我正在做一个基本的在线课程,并且我已经对一个示例中的代码进行了验证,因为我正在编写一个程序,该程序可以显示特定流派的电影列表,其中的标题包含给定的字符串。局部变量名为'selectedData'不能声明

我收到以下错误消息时我尝试推出的浏览器应用程序:

编译器错误信息:CS0136:命名为“selectedData”的局部变量不能在此范围内声明,因为它会给出不同的意思是'selectedData',它已经在'父或当前'范围内用于表示别的东西

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

源错误:

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

源文件:C:\用户\查尔斯\ Documents \我的网站\ 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); 

}

任何人都可以帮助我?

谢谢!

干杯!

+0

你已经有'selectedData'变量在'if'块之前声明 –

+0

你可能有一个命名问题,但我认为你会很难'尝试编写一个能够显示书目列表的程序'如果你在名为'WebPagesMovies'的数据库上查找书籍=) – user2140261

+0

哈哈哈...对不起...我的意思是MOVIES – user2038763

回答

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...同名。

+0

谢谢...有什么想法说明这个变量应该被声明为? 我已经试过字符串,但我得到这个错误: CS0029:无法键入“System.Collections.Generic.IEnumerable ”隐式转换为“字符串” 感谢 – user2038763

0

变化

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

selectedData = db.Query(selectCommand, searchTerm); 

你重新声明它,你不想/不能做。

+0

谢谢...这个变量应该是什么类型的任何想法被宣布为?? 我已经试过字符串,但我得到这个错误: CS0029:无法隐式转换类型“System.Collections.Generic.IEnumerable ”到“字符串” 感谢 – user2038763

2

您在ifelse机体中重新标记为selectedData。你不想这么做 - 你已经早些时候宣布了这个变量。您只需将这些语句更改为作业即可。所以这个:

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虽然 - curr现在它是一个给定初始值的字符串 - db.Query还返回string吗?这对我来说似乎不太可能。

编辑:如前所述,它看起来像你只需要decalre selectedData这样的:

IEnumerable<dynamic> selectedData = null; 
+0

谢谢乔恩! 你是对的,,,它给我一个错误,现在重新转换 CS0029:不能隐式地将类型'System.Collections.Generic.IEnumerable '转换为'字符串' 我不知道U应该声明的类型这个变量.. – user2038763

+0

乔恩,这里是selectData的类型的答案: IEnumerable selectedData = null; 干杯! – user2038763

0

感谢所有为解决VAR问题..

至于如何解决该类型selectData,这个技巧:

IEnumerable selectedData = null;

干杯!

相关问题