微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在从最新的孩子获取几个字段的同时获取对象

如何解决在从最新的孩子获取几个字段的同时获取对象

我的模型中有两个对象(下面是简化版)

class Author
{
    int ID;
    string Name;
    List<Book> Books;
}

class Book
{
    int ID;
    string Title;
    DateTime PublishDate;
    Author Author;
}

我需要获取所有作者,对于每个作者,我需要最新一本书的 ID 和 PublishDate。

我尝试了以下但没有给我预期的结果:

var authors = db.Authors
    .SelectMany(a => a.Books.OrderByDescending(b => b.PublishDate).DefaultIfEmpty(),(A,B) => new { Author = A,LastBook = B})

我更喜欢使用 Lambda 表达式(用于学习目的)。

感谢您的帮助。

解决方法

选择很多不是这里的方法。当您必须将多个集合合并为一个集合时,选择多个非常有用。相反,您只想为每个作者选择最近的一本书,然后从该最近的书中导航到作者 ID。

类似于下面的代码应该可以工作。我目前没有办法测试,可能需要一些修改。

var data = db.Authors
    .Select(author => author.Books.OrderByDescending(book => book.PublishDate).FirstOrDefault())
    .Where(recentBook => recentBook != null)
    .Select(recentBook => new { Author = recentBook.Author,RecentBook = recentBook });

上述查询将排除没有书籍的作者。根据您的数据,您可能不需要空检查。如果作者可以在数据库中但没有任何书籍,则需要进行空检查。如果作者没有一本书就无法进入数据库,您可以使用空检查省略 where 子句。

要获取所有作者而不考虑最近的书,您可以改用此查询。

var data = db.Authors
    .Select(author => new { Author = author,RecentBook = author.Books.OrderByDescending(book => book.PublishDate).FirstOrDefault() });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。