2011-07-17 7 views
0
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 '%'[email protected]+'%' 
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 '%'[email protected]+'%' or Manager like '%'[email protected]+'%' or CenterOfficeAddress like '%'[email protected]+'%' or CompanyAddress like '%'[email protected]+'%' or Website like '%'[email protected]+'%' or EmailCompany like '%'[email protected]+'%' or Tel1 like '%'[email protected]+'%' or Tel2 like '%'[email protected]+'%' or Country like '%'[email protected]+'%' or Province like '%'[email protected]+'%' or City like '%'[email protected]+'%' or WorkExperience like '%'[email protected]+'%' or ResumeManager like '%'[email protected]+'%' or HistoryCompany like '%'[email protected]+'%' or DescriptionField like '%'[email protected]+'%' or SummaryField like '%'[email protected]+'%' 
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; 
    } 
を表示します

エラーを返します。

Error:'FullSearchResult' does not contain a definition for 'IdCompany' and no extension method 'IdCompany' accepting a first argument of type 'FullSearchResult' could be found (are you missing a using directive or an assembly reference?)

+0

NITのピッキング:それは** SummaryFieldOnly **だろう - 何それは関係なく –

答えて

2

ここでは大文字と小文字の区別の問題があります。

お客様のSPには、2つの選択ステートメントがあります。一方ではidCompanyを返し、もう一方ではIdCompanyを返します。

あなたのSPで修正しても問題ありません。

C#では大文字と小文字が区別されます。 SPの結果に対してクラスが作成されるため、資本化にあいまいさがあると、問題が発生する可能性があります。

+0

LINQ DBML図を作成し、LINQ DBML図にストアドプロシージャを再追加しますか? – ashkufaraz

+0

あなたのストアドプロシージャを修正して、あなたからのストアドプロシージャを削除してしまっていないではないではない* SumeryFieldOnly *(あなたのストアドプロシージャのパラメータの) –

+0

は今でもこの仕事をしていますが、まだまだ... – ashkufaraz

2

param値に基づいて別の形の結果セットを返します。

LINQ To SQLが結果セットをクラスFullSearchResultにマップするため、この例外が表示されます。設計時には、FullSearchの結果セットに、の最初の選択ステートメントのプロパティ/列が含まれていることが判明しました。SummaryFieldNameCompanyidCompany

実行時に、多くの列/プロパティを結果クラスにロードしようとしています。 IdCompanyがエラーをスローしていない場合は、Managerとなります。

  • リターン予測可能で、一貫形の結果セットに関係なく、どのような入力:

    はあなたの保存にprocのをリファクタリングオススメ。
  • '最も広い'結果セットのテーブル変数を作成/定義します。
  • をブランチに追加し、そのテーブル変数に挿入します。
  • ストアドプロシージャの最後にテーブルのすべての列を選択します。
+0

これは正解です.1位と2位を交換しましたが、今はitem.idcompanyを表示しますが、実行時にはまだ表示されていません – ashkufaraz

関連する問題