Я работаю над проектом, в котором пользователи могут добавлять / редактировать / удалять книгу из базы данных и зарезервировать ее. В основном база данных библиотеки. В моей таблице пользователей (TblUser) у меня есть userId (PK), имя, адрес электронной почты и т. Д. c .. В моей таблице книг (TblBook) у меня есть bookID (PK), имя книги, автор и т. Д. c. И, наконец, у меня есть TblBookStatus, у которого есть resID (PK), bookID, userID и status. Я не подключил bookID и userID в качестве внешнего ключа из-за некоторых c причин, связанных с проектом. Когда пользователь резервирует книгу, идентификатор пользователя, идентификатор книги и статус добавляются в виде строки в таблицу TblBookStatus. Я пытаюсь отобразить книги, зарезервированные пользователем (TblBookStatus). вот мой C# код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LibMan.Models.DB;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
namespace LibMan.Pages
{
public class LibraryModel : PageModel
{
private readonly LibMan.Models.DB.LibManContext _context;
public string Message { get; set; }
public LibraryModel(LibMan.Models.DB.LibManContext context)
{
_context = context;
}
public IList<TblBookStatus> TblBookStatus { get; set; }
public IList<TblBook> TblBook { get; set; }
public IList<TblBook> DisplayBook { get; set; }
public async Task OnGetAsync()
{
TblBookStatus = await _context.TblBookStatus.ToListAsync();
TblBook = await _context.TblBook.ToListAsync();
foreach(var item in TblBook)
{
foreach(var item2 in TblBookStatus)
{
if(item.BookId == item2.BookId)
{
DisplayBook.Add(item);
}
}
}
}
}
}
Я попытался превратить обе таблицы в списки, проверить пересекающиеся идентификаторы книг и создать новый список для их отображения, но я получил сообщение об ошибке: NullReferenceException: ссылка на объект не установлена на экземпляр объекта. в строке DisplayBook.Add(item);
Я видел, как люди пишут SQL команды, но я не уверен, должен ли я это делать. Вот сторона HTML
@page
@model LibMan.Pages.LibraryModel
@{
ViewData["Title"] = "Library";
Layout = "~/Pages/Shared/_postLoginLayout.cshtml";
}
<h1>Library</h1>
<p>
<a asp-page="Create">Add a new Book</a>
</p>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.TblBook[0].Title)
</th>
<th>
@Html.DisplayNameFor(model => model.TblBook[0].Author)
</th>
<th>
@Html.DisplayNameFor(model => model.TblBook[0].Translator)
</th>
<th>
@Html.DisplayNameFor(model => model.TblBook[0].Publisher)
</th>
<th>
@Html.DisplayNameFor(model => model.TblBook[0].Description)
</th>
<th>
@Html.DisplayNameFor(model => model.TblBook[0].Category)
</th>
<th>
@Html.DisplayNameFor(model => model.TblBook[0].Status)
</th>
<th>
@Html.DisplayNameFor(model => model.TblBook[0].Cover)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.DisplayBook)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Author)
</td>
<td>
@Html.DisplayFor(modelItem => item.Translator)
</td>
<td>
@Html.DisplayFor(modelItem => item.Publisher)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.Category)
</td>
<td>
@Html.DisplayFor(modelItem => item.Status)
</td>
<td>
@Html.DisplayFor(modelItem => item.Cover)
</td>
<td>
<a asp-page="./GetBook" asp-route-id="@item.BookId">Get Book</a> |
<a asp-page="./Edit" asp-route-id="@item.BookId">Edit</a> |
<a asp-page="./Details" asp-route-id="@item.BookId">Details</a> |
<a asp-page="./Delete" asp-route-id="@item.BookId">Delete</a>
</td>
</tr>
}
</tbody>
</table>
Спасибо за помощь!