c# - LINQ 查询仅加入最后一个值

标签 c# asp.net sql-server linq join

我正在制作一个 ASP.NET C# 库系统。获取 (MSSQL) 数据库设计的屏幕截图: DB-design:

为了显示书籍,我使用了 Rentals 表。 但是我的问题:

  • 我将 Books 表与 Rentals 表合并在一起(因为还需要显示尚未租过一次的书(请参阅 id 为 3 的书)
  • 当我刚做 left join 时,我在 books-overview 中多次看到我的书 offcourse...
  • SO:我应该需要一个 LINQ 查询,将 Books 与 Rentals 结合起来,但如果这些书已经被多次出租,他应该只加入 >该 book_id 表中的最后一个值
  • 看下图:查询应该只选择绿色选择的值...
  • (额外信息:如果有人租了一本书,返回值=0,如果他还书,它就变成1)

Example data of tables

我现在的查询是:

var query = (from b in db.Books
                     join a in db.Authors on b.author_id equals a.author_id
                     join c in db.Categories on b.category_id equals c.category_id
                     join r in db.Rentals on b.book_id equals r.book_id into lf
                     from r in lf.DefaultIfEmpty()
                     select new BookDetails(
                                b.book_id,
                                b.title,
                                b.ISBN,
                                b.description,
                                b.author_id,
                                a.firstName,
                                a.lastName,
                                b.category_id,
                                r.returned == null ? 1 : r.returned)
                     ).ToList();

但是就像我说的,这会多次显示我租借的书...... 我一直在考虑具有“MAX”属性的东西? (但这适用于 linq 吗?)

最佳答案

您可以按图书 ID 对图书进行分组,然后从每组中选择第一项。这是一种模拟“不同”的巧妙方法。在你的情况下是

var query = (from b in db.Books
             join a in db.Authors on b.author_id equals a.author_id
             join c in db.Categories on b.category_id equals c.category_id
             join r in db.Rentals on b.book_id equals r.book_id into lf
             from r in lf.DefaultIfEmpty()
             group new{ Book = b, Author = a, Rental = r }
                 by b.book_id into booksById
             let item = booksById.First()
             select new BookDetails(
                 item.Book.book_id,
                 item.Book.title,
                 item.Book.ISBN,
                 item.Book.description,
                 item.Book.author_id,
                 item.Author.firstName,
                 item.Author.lastName,
                 item.Book.category_id,
                 item.Rental.returned == null
                     ? 1 : item.Rental.returned))
             .ToList();

关于c# - LINQ 查询仅加入最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20288521/

相关文章:

c# - 将 {0} 变量添加到 Excel 电子表格名称

c# - 当父任务抛出异常时停止继续任务

c# - 如何保护 .Net exe 免遭反编译/破解

asp.net - 如何在 asp.net 中单击按钮时显示/隐藏 gif 图像

sql-server - 在 SQL 中遍历多个 CSV

c# - 通过 ESC/P 命令将位图写入 Epson TM88IV (Write To NVRam)

asp.net - 在 jQuery UI 模态消息中显示 ASP.NET 验证摘要

html - 在 <asp : Label> 中嵌入 CSS 样式、事件超链接

sql - 使用文件内容更新图像字段的最简单方法是什么

c# - Entity Framework 4 多对多不删除实际实体