簡體   English   中英

EF。 根據第二個表中記錄的屬性從一個表中選擇記錄,而第二個表中記錄的屬性為FK

[英]EF. Select records from one table based on the properties of the records from second table that have an FK from the first

我有兩張桌子。 BookTitles和BookAuthors。 BookTitle可以包含多個BookAuthor:

BookTitles:
- Book_Id
- BookName

BookAuthors:
- Author_Id
- AuthorName
- Book_Id

在第二個表中,Book_Id是外鍵。 我先使用實體​​框架,首先是數據庫。 這是BookTitles表的模型(自動創建):

public partial class BookTitles
{
    public BookTitles()
    { this.BookAuthors = new HashSet<BookAuthors>(); }

    public int Book_Id { get; set; }
    public string BookName { get; set; }

    public virtual ICollection<BookAuthors> BookAuthors { get; set; }
}

最后一個屬性顯示BookTitles類型的對象將包含從第二個表中檢索到的BookAuthors對象的列表。

問題:如何檢索BookTitles記錄,該記錄將包含例如具有BookAuthors.AuthorName ==“ AAA”的BookAuthors類型的對象?

我試過了,但是沒有用:

using (var db = new BooksContext())
{
    var books =
        db.BookTitles.Where(x => x.BookAuthors.Contains(new BookAuthors() {AuthorName = "AAA"})).ToList();
}

如何使用Lambda表達式查詢它以及如何使用LINQ to Entities進行查詢?

使用Any代替Contains

var books =
    db.BookTitles.Where(x => x.BookAuthors.Any(y => y.AuthorName == "AAA")).ToList();

或者如果BookAuthor包含導航屬性BookTitles ,你應該能夠做到:

var books = 
    db.BookAuthors.FirstOrDefault(x => x.AuthorName == "AAA").BookTitles.ToList();

請嘗試以下操作:

using (var db = new BooksContext())
{
    var books = from title in db.bookTitles
                from author in title.BookAuthors
                where author.AuthorName == "AAA"
                select title;             
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM