1

これは私のストアドプロシージャの実装です:

ALTER procedure [dbo].[ShowProjectByNameOfPerson]
(@name as nvarchar)
as begin

select   Personality.id,COUNT(*) as cnt into  #test 
 from Personality,Project,Personal_project
where Personality.Id = Personal_project.PersonalityId_FK
and Project.Id = Personal_project.ProjectId_FK
and Personality.FullName like N'%'+@name+'%'
group by Personality.Id
order by cnt desc
select * from #test,Personality
where #test.id = Personality.id
end

ASP.Net プロジェクトで Linq ToSQL クラス アイテムを作成し、プロシージャを DBML ファイルに割り当てました。しかし、コンテキストのインスタンスを作成した後にプロシージャを使用したい場合、次のエラーが発生します。

Cannot assign void to an implicitly-typed local variable

No overload for method 'ShowProjectByNameOfPerson' 

そして、これは .cs ファイルのストアド プロシージャの呼び出しコードです。

DataClassesDataContext db = new DataClassesDataContext();
var lst = db.ShowProjectByNameOfPerson(txt);

どうすればこの問題を解決できますか?

ありがとうございます。

4

1 に答える 1

3

さまざまな t-sql 関数の種類に混乱しています。

あなたが望むものは:

create function [dbo].[ShowProjectByNameOfPerson] (@name as nvarchar)
returns table
as return (
  select
    Personality.Id, Personality.FullName, 
    COUNT(*) as cnt
  from Personality
  inner join Personal_project 
    on Personality.Id = Personal_project.PersonalityId_FK
  where Personality.FullName like N'%' + @name + N'%'
  group by Personality.Id, Personality.FullName
  order by cnt desc
);

構文のバリエーションとその意味を理解するには、MSDN リファレンスを参照してください: http://msdn.microsoft.com/en-us/library/ms186755.aspx

また、不必要に一時テーブルを使用しないようにする必要があります (コードをどのように変更したかを参照してください)。

于 2013-06-24T22:35:01.723 に答える