Linq存储过程问题 – 返回int

我试图用Linq调用一个存储过程,存储过程在SQL中返回值很好,但当我将它拖到我的DBML文件并尝试从我的代码调用它时它返回

无法找到源类型“int”的查询模式的实现。 找不到“选择”。

我查看了其他线程和其他存储过程,由于某些原因而不是使用ISingleResult这是不同的,我似乎也无法更改返回类型。

这是背后的DBML代码

 [global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.displayDetails")] public int displayDetails([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="VarChar(1)")] string sex, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable day, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable month, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable year, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="PostCode", DbType="VarChar(10)")] string postCode, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="AppTime", DbType="DateTime")] System.Nullable appTime, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable filter) { IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), sex, day, month, year, postCode, appTime, filter); return ((int)(result.ReturnValue)); } 

我的页面代码正在收到错误

  var person = from p in db.displayDetails(sex.ToString(), Convert.ToInt32(dayOfBirth), Convert.ToInt32(monthOfBirth), Convert.ToInt32(yearOfBirth), postCode.ToString(), Convert.ToDateTime(appointmentTime), Convert.ToInt32(resultType)) select person; { p.Forename, p.Surname, p.AppointmentTime, p.Location }; foreach (var record in person) { lblName.Text = record.Forename + " " + record.Surname; lblAppointmentTime.Text = record.AppointmentTime.ToString(); lblWaitIn.Text = record.Location; } 

如何解决这个问题的任何帮助将不胜感激。

更新 – 嗨,这是我的SP:

 @sex varchar (1), @day int, @month int, @year int, @PostCode varchar (10), @AppTime DateTime, @filter int AS BEGIN declare @sql nvarchar(max) -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here Select @Sql = 'SELECT DAY(DateOfBirth) AS DayOfBirth, MONTH(DateOfBirth) AS MonthOfBirth, YEAR(DateOfBirth) AS YearOfBirth, DateOfBirth, Sex, AppointmentTime, SchdlRefno, Forename, Surname, ClinicCode, Ur, PostCode, Specialty, Location FROM dbo.tbl_Appointments' if @filter = 1 -- show search by just sex, day and month as no more needed for match Select @sql = @Sql + ' WHERE (DAY(DateOfBirth) = ' + convert(varchar, @day, 103) + ') AND (MONTH(DateOfBirth) = ' + convert(varchar, @month, 103) + ') AND (Sex = ''' + @sex + ''')' if @filter = 2 -- show search by sex, day and month and postcode Select @sql = @Sql + ' WHERE (DAY(DateOfBirth) = ' + convert(varchar, @day, 103) + ') AND (MONTH(DateOfBirth) = ' + convert(varchar, @month, 103) + ') and (YEAR(DateOfBirth) = ' + convert(varchar, @year, 103) + ') AND (Sex = ''' + @sex + ''') and (postcode = ''' + @postcode + ''')' if @filter = 3 -- show search by sex, day and month, postcode and appointment time Select @sql = @Sql + ' WHERE (DAY(DateOfBirth) = ' + convert(varchar, @day, 103) + ') AND (MONTH(DateOfBirth) = ' + convert(varchar, @month, 103) + ') and (YEAR(DateOfBirth) = ' + convert(varchar, @year, 103) + ') AND (Sex = ''' + @sex + ''') and (postcode = ''' + @postcode + ''') and (AppointmentTime = ''' + convert(varchar, @AppTime, 121) + ''')' print @sql Exec sp_executesql @sql END 

因此,我通过filter来带回不同的搜索结果。

谢谢

问题是你的函数不是集合的结果,它是标量值( int )因此无法投影。