如何解决在从最新的孩子获取几个字段的同时获取对象
我的模型中有两个对象(下面是简化版)
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 举报,一经查实,本站将立刻删除。