I am trying to call a stored procedure with Linq, the stored procedure returns the value fine in SQL, but when I drag it onto my DBML file and try and call it from my code it is returning the
Could not find an implementation of the query pattern for source type 'int'. 'Select' not found.
I've looked at other threads and other stored procedures I have and for some reason rather than using an ISingleResult
this is different and I cant seem to change the Return Type either.
This is the DBML code behind
[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));
}
My page code which is getting the error
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;
}
Any help on how to get this resolved would be appreciated.
Update - Hi, here is my 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
So, im passing a filter through to bring back different search results.
Thanks
The problem is the result of your function isn't a collection, it's a scalar value (
int
) therefore can't be projected.