I have a really stupid question. I have a foreach loop in my project:
@foreach (var item in Model.HallIndex!)
The foreach gives me all the halls in a cinema the movies which are scheduled in the future, including the time of the movie. So I get this back from the query to my webapp:
Cinema 1
Now playing:
Next movie: SCREAM (3:00 pm)
Cinema 2:
Now playing:
Next movie: TITANIC (8:30 pm)
Etcetera... I think you get it so far. BUT! I would like to use the Hallnumber to get the result of another query, which gets the movie from the database playing now in each hall. So, I need to get a parameter to the Controller.
Edit
This is what I really try to do, but MovieNow doesn't work:
Controller:
public async Task<ActionResult<IndexViewModel>> Index(int hallId)
{
IndexViewModel indexViewModel = new IndexViewModel();
indexViewModel.MovieIndex = MovieIndex();
indexViewModel.MovieNow = MovieNow(hallId);
indexViewModel.HallIndex = MovieNext();
return View(indexViewModel);
}
public Showtime MovieNow(int hallId)
{
return _context.Showtime.FromSqlRaw("SELECT * FROM db.\"Showtime\" S JOIN db.\"Movie\" M ON S.\"MovieId\" = M.\"Id\" WHERE \"StartAt\" < now() AND S.\"HallId\" = {0} ORDER BY \"StartAt\" DESC", hallId).FirstOrDefault();
}
ViewModel:
public class IndexViewModel
{
public Hall? Hall { get; set; }
public Movie? Movie { get; set; }
public IEnumerable<Showtime>? MovieIndex { get; set; }
public IEnumerable<Showtime>? HallIndex { get; set; }
public Showtime? MovieNow { get; set; }
}
View:
<div >
<div >
@foreach (var item in Model.HallIndex!)
{
<div >
<p >CINEMA @Html.DisplayFor(model => item.HallId)</p>
<p >Now playing: @Html.DisplayFor(m => Model.MovieNow.Movie.Title, item.HallId) </p>
<p ><span >Next movie:</span> @Html.DisplayFor(model => item.Movie.Title)
@{
var startTime = item.StartAt.ToLocalTime().TimeOfDay.ToString(@"hh\:mm");
}
(@Html.DisplayFor(model => startTime))</p>
</div>
<hr />
}
</div>
</div>
If I do this, I get the error: "PostgresException: 42702: column reference "Id" is ambiguous POSITION: 8"
CodePudding user response:
As you are joining the Showtime and Movie tables, the SELECT *
will return all columns from both tables. And apparently both contain an Id column, so which should be used to fill an Id property?
Solution: limit the columns returned to the one correct table by using SELECT s.*
CodePudding user response:
Make sure you are passing right parameters,becuase your code looks good.