Попытка получить значение хранимой процедуры - Ошибка: «не содержит определения» - PullRequest
0 голосов
/ 17 июля 2011
ALTER procedure FullSearch(@sumeryFieldOnly as bit,@allPropertyCompany as bit,@txtSearc as nvarchar(200)) 
as 
begin
if @sumeryFieldOnly=1
begin
    select SummaryField,NameCompany,idCompany from propertyCompany where SummaryField like '%'+@txtSearch+'%'
end
if @allPropertyCompany =1 
begin
        select IdCompany, NameCompany,Manager,CenterOfficeAddress,CompanyAddress,Website,EmailCompany,Tel1,Tel2,Country,Province,City,WorkExperience,ResumeManager,HistoryCompany,DescriptionField,SummaryField,'MainPP.aspx?idCompany='+cast(IdCompany as nvarchar(20)) as URL
        from PropertyCompany
        where   NameCompany like '%'+@txtSearch+'%' or Manager like '%'+@txtSearch+'%' or CenterOfficeAddress like '%'+@txtSearch+'%' or CompanyAddress like '%'+@txtSearch+'%' or Website like '%'+@txtSearch+'%' or EmailCompany like '%'+@txtSearch+'%' or Tel1 like '%'+@txtSearch+'%' or Tel2 like '%'+@txtSearch+'%' or Country like '%'+@txtSearch+'%' or Province like '%'+@txtSearch+'%' or City like '%'+@txtSearch+'%' or WorkExperience like '%'+@txtSearch+'%' or ResumeManager like '%'+@txtSearch+'%' or HistoryCompany like '%'+@txtSearch+'%' or DescriptionField like '%'+@txtSearch+'%' or SummaryField like '%'+@txtSearch+'%'
end

end

LINQ

     var result = dc.FullSearch(true,false,"abc");
    foreach (var item in result){
        str +=item.SummaryField;
    }

str работает нормально и показывает SummaryField

НО

var result = dc.FullSearch(false,true,"abc");
    foreach (var item in result){
        str +=item.idCompany;
    }

возвращает ошибку:

Ошибка: «FullSearchResult» не содержит определения для «IdCompany», и невозможно найти метод расширения «IdCompany», принимающий первый аргумент типа «FullSearchResult» (вы пропустили директиву usingссылка на сборку?)

Ответы [ 2 ]

2 голосов
/ 17 июля 2011

Вы возвращаете набор результатов различной формы на основе значения параметра.

Вы видите это исключение, потому что LINQ To SQL отображает набор результатов в класс FullSearchResult.Во время разработки он определил, что ваш набор результатов из FullSearch имеет свойства / столбцы из вашего оператора first select: SummaryField, NameCompany, idCompany.

Во время выполнения вы пытаетесь загрузить намного больше столбцов / свойств в свой класс результатов.Если бы это не было IdCompany, выдававшим ошибку, это было бы Manager и т. Д.

Рекомендую вам реорганизовать свой сохраненный процесс для:

  • вернуть aпредсказуемый, последовательный набор результатов, независимо от того, какие входные данные.
  • создайте / определите переменную таблицы для «самого широкого» набора результатов.
  • в ваших ветвях, вставьте в эту переменную таблицы.
  • ВЫБЕРИТЕ все столбцы из вашей таблицы наконец вашего сохраненного процесса.
2 голосов
/ 17 июля 2011

Здесь есть проблема чувствительности к регистру.

В вашем SP есть два оператора выбора.В одном вы возвращаете idCompany, а в другом вы возвращаете IdCompany.

Вероятно, он будет работать нормально, если вы исправите это в SP.

C # чувствителен к регистру;класс создается для результатов SP, поэтому из-за неясностей в заглавных буквах могут возникнуть проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...