2013-10-24 3 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: \ Users \ Charles \ Documents \ My Web Sites \ WebPagesMovies \ MoviesCombinedQuery.cshtml Line: 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); 

Может ли кто-нибудь мне помочь?

Спасибо!

Cheers !!

+0

У вас уже есть переменная 'selectedData', объявленная непосредственно перед блоком' if' –

+0

Возможно, у вас есть проблема с именами, но я думаю, что вам будет сложно: попробуйте написать программу, которая может отображать список книг 'если ваши поисковые книги на databse с именем' WebPagesMovies' =) – user2140261

+0

hahaha ... извините ... Я имел в виду ФИЛЬМЫ – user2038763

ответ

0

Удалите вар из selectedData в коде филиала

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

Спасибо ... любая идея о том, какой тип этой переменной следует объявить как? Я пробовал STRING, но я получаю эту ошибку: CS0029: Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable ' to 'string' Спасибо – user2038763

0

изменение

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

в

selectedData = db.Query(selectCommand, searchTerm); 

Вы его повторного объявления, которые вы не хотите/не можете сделать.

+0

Спасибо ... любая идея о том, какой тип этой переменной должен быть объявленным как ?? Я пробовал STRING, но я получаю эту ошибку: CS0029: Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable ' to 'string' Спасибо – user2038763

2

Вы обновляете код selectedData в if и else тел. Вы не хотите этого делать - вы уже объявили переменную раньше. Вам просто нужно изменить эти выражения на присвоения существующей переменной.Так что это:

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 ently это строка с ее начальным значением - db.Query возвращает string? Это мне показалось бы маловероятным.

EDIT: Как было отмечено, это выглядит, как вам просто нужно decalre selectedData так:

IEnumerable<dynamic> selectedData = null; 
+0

Спасибо Jon! Вы правы ,,, это дает мне ошибку теперь преобразование CS0029: Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable ' to 'string' Я понятия не имею, что тип U должен объявить эта переменная .. – user2038763

+0

Jon, вот ответ для ТИПА для selectData: IEnumerable selectedData = null; Приветствия! – user2038763

0

Спасибо всем за решение проблемы VAR ..

Насколько как исправить TYPE для selectData, это сделал трюк:

IEnumerable selectedData = null;

Cheers !!

Смежные вопросы