Основано на ваших комментариях:
Сначала вам нужно будет внести изменения в вашу хранимую процедуру, введя предложение where
и приняв параметр в.
ALTER PROCEDURE usp_MovieByMedia
@MediaID INT //This is the parameter we will accept in the stored procedure which will be passed via our c# code
SELECT MovieTitle, MovieYear
FROM MOVIES
WHERE MediaTypeID = @MediaID // I'm assuming the names here, change as required
Теперь вы хотите изменить свой метод следующим образом:
public Movies GetMovieByMedia(int MediaID)
{
string connectionString = "Server=ServerName;Database=DatabaseMovies;Trusted_Connection=True;MultipleActiveResultSets=true";
var movies = new Movies();
using (var con = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand("usp_MovieByMedia", con))
{
cmd.Parameters.Add(new SqlParameter("@MediaID", SqlDbType.Int) { Value = MediaID }); //you was missing this.
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
using (var reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
movies.MovieTitle = reader["MovieTitle"].ToString();
movies.MovieYear = Convert.ToInt32(reader["MovieYear"]);
}
}
}
}
return movies;
}
Это вернет вам один объект Movie.
Обратите внимание, я предположил, что ваш столбец MediaTypeID
имеет тип INT в БД, а не varbinary(1)/binary(1)
. Если это неправильно, измените как требуется.
Теперь в вашем OnGetAsync
действии вы можете сделать:
Movies = objmovie.GetMovieByMedia(id);
Если вы не хотите выполнять фильтрацию в базе данных, вы можете использовать linq для фильтрации в вашем приложении как:
Movies = objmovie.GetMovieByMedia(id).FirstOrDefault(i => i.MediaTypeID == id); //this will only work if your method stays with the return type of IEnumerable<Movies>