Linq外键|如何只显示具有特定外键的元素?

问题描述 投票:0回答:1

我有两个表:书和章

Book
ID
Title
Author

Chapter
ChapterID
BookID
Title

我在Controller中有一个方法,它应该显示一本书的所有章节的列表。但是,它显示章节表中的所有元素,而不是与BookID匹配的元素

这是我的方法:

public ActionResult ViewChapters()
    {
        var chapters = db.Chapters
                             .Where(x => x.BookId ==  x.Book.ID)
                             .Include(x => x.Book).ToList();
        return View(chapters);
    }

我想我的linq查询有问题。

c# linq entity-framework-6
1个回答
1
投票

您应该将书的ID传递给方法,否则代码无法知道您引用的是哪本书。

public ActionResult ViewChapters(Guid bookId)
{
    var chapters = db.Chapters
                         .Where(x => x.BookId == bookId)
                         .Include(x => x.Book).ToList();
    return View(chapters);
}

Where谓词评估db.Chapters中的每个项目,并仅保留谓词返回true的项目。正如Fabio在评论中提到的,当你比较x.BookId == x.Book.ID时,结果对于db.Chapters集合中的每个项目都是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.