我正在尝试使用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<int> day, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable<int> month, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable<int> 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<System.DateTime> appTime, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType="Int")] System.Nullable<int> 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
所以,我通过过滤器来带回不同的搜索结果。
由于
答案 0 :(得分:4)
问题是你的函数不是集合的结果,它是标量值(int
),因此无法投影。