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
BUT
var result = dc.FullSearch(false,true,"abc");
foreach (var item in result){
str +=item.idCompany;
}
返回错误:
错误:'FullSearchResult'不包含。的定义 'IdCompany'并没有扩展方法'IdCompany'接受第一个 可以找到“FullSearchResult”类型的参数(你错过了吗? 使用指令或程序集引用?)
答案 0 :(得分:2)
此处存在区分大小写问题。
在您的SP中,您有两个选择语句。在一个中,您返回idCompany
,在另一个中,您返回IdCompany
。
如果您在SP中修复它,它可能会正常工作。
C#区分大小写;为SP的结果创建一个类,因此如果大写中存在歧义,则可能出现问题。
答案 1 :(得分:2)
您将根据参数值返回不同形状的结果集。
您看到此异常,因为LINQ To SQL将结果集映射到类FullSearchResult
。在设计时,已确定FullSearch
的结果集包含第一个选择语句中的属性/列:SummaryField
,NameCompany
,{{1 }}
在运行时,您尝试将更多列/属性加载到结果类中。如果不是idCompany
抛出错误,那就是IdCompany
,依此类推。
建议您将存储过程重构为: