Linq Stored Procedure Issue- Returning an int
asp.net, c#, int, linq, linq-to-sql
Solution
The problem is the result of your function isn't a collection, it's a scalar value (`int`) therefore can't be projected.
Problem
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