我正在從Books表中加載書籍的IQueryable,還有另一個名爲BookLoans的表。我有一個DateTime?屬性在我的ViewModel命名爲可用性。我試圖找出在我的select語句中基本出去的最佳方法,並查看當前Book的BookID是否出現在BookLoans表中的記錄中,以及DateTime是否出現?名爲ReturnedWhen的變量在該記錄中也是NULL。我基本上試圖將本書標記爲可用,或者在填充IQueryable時將其選中。在LINQ聲明中檢查第二個表中的值
有人建議我儘可能將這一切都當作一個LINQ語句,但我試圖弄清楚如果像下面那樣填充書籍然後通過foreach循環運行它會更容易嗎?也有人建議加入會工作,但我真的只是想找出最好的方法,然後如何去實際做到這一點。
var books =
_context.Books
.Select(r => new BookIndexViewModel
{
BookID = r.BookID,
Title = r.Title,
Author = r.Author,
ISBN = r.ISBN,
GenreName = r.Genre.Name
}).ToList();
Book實體:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Open_School_Library.Data.Entities
{
public class Book
{
public int BookID { get; set; }
public string Title { get; set; }
public string SubTitle { get; set; }
public string Author { get; set; }
public int GenreID { get; set; }
public int DeweyID { get; set; }
public int ISBN { get; set; }
public Genre Genre { get; set; }
public Dewey Dewey { get; set; }
public virtual BookLoan BookLoan { get; set; }
}
}
BookLoan實體:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Open_School_Library.Data.Entities
{
public class BookLoan
{
public int BookLoanID { get; set; }
public int BookID { get; set; }
public int StudentID { get; set; }
public DateTime CheckedOutWhen { get; set; }
public DateTime DueWhen { get; set; }
public DateTime? ReturnedWhen { get; set; }
public Book Book { get; set; }
public Student Student { get; set; }
}
}
BookIndexViewModel:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace Open_School_Library.Models.BookViewModels
{
public class BookIndexViewModel
{
public int BookID { get; set; }
public string Title { get; set; }
[Display(Name = "Author")]
public string Author { get; set; }
[Display(Name = "Genre")]
public string GenreName { get; set; }
public int ISBN { get; set; }
public string BookLoan { get; set; }
public DateTime? Availability { get; set; }
}
}
我得到它和工作,但我不會說謊,我不完全瞭解情況,在LINQ聲明,我是想知道你是否可以爲我分手? –
@ChristopherJohnson查看我添加到答案的細目,並告訴我這是否有幫助。 LINQ查詢可能會變得非常複雜,難以閱讀。 –
它奇妙地工作。我想知道我需要做什麼才能使這項工作適用於單個查詢?我希望在Details視圖上重複使用或者修改這個,我一直使用'.FirstOrDefault()'以及用'Where whatever.BookId == id'過濾。 –