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

标签 c# linq entity-framework-6

我有两个表:Book 和 Chapter

Book
ID
Title
Author

Chapter
ChapterID
BookID
Title

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

这是我的方法:

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

我猜我的 linq 查询有问题。

最佳答案

您应该将书籍的 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 集合中的每个项目都是 true。

关于c# - Linq 外键 |如何只显示具有特定外键的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55071052/

相关文章:

c# - 将字符串转换为具有偏移量的 DateTime

linq - 经常使用 LINQ 是一种好习惯吗?

c# - 如何在 Database.EnsureCreated() EF Xamarin.Forms 之后使用 Database.Migration()

c# - 如何确定我的 EF 6 数据库初始化程序是否会运行?

c# - 带有 SQL Server 数据库和 Entity Framework 错误的 Windows 应用程序部署

c# - MVC5 中的自定义声明不返回任何内容

c# - 这个 MSDN CompareExchange 示例如何不需要 volatile 读取?

c# - `AsyncCallback` 和 `@object` 关于 .Net 中的委托(delegate)的目的是什么

c# - 过滤节点文本中包含大于字符的 XML 节点

linq - LINQ 中的 GroupBy 字符串和计数