c# - 实体框架选择多对多与连接文本
问题描述
类
书:Id,名称,内容,出版
作者:Id,名称
是多对多
书
Id | Name | Content | Publishment
1 book1 somecontent some pub
2 book2 somecont somepub
作者
Id | Name
1 Author1
2 Author2
3 Author3
4 Author4
图书作者
IdBook | IdAuthor
1 2
1 3
1 4
2 1
2 3
我怎样才能得到类似的东西:
Name | Content | Author
Book1 some content Author2,Author3,Author3
Book2 somecontent Author1,Author3
解决方案
有几种方法可以做到这一点。
我假设基于此您正在使用 DB-first。如果是这种情况,您的实体将创建为部分类。为您的 Book 类创建一个新的部分类文件,并添加一个新属性来检索作者姓名。像这样的东西:
public partial class Book
{
public string AuthorNames => string.Join(", ", authors.Select(a => a.Name));
}
为防止多次访问数据库以检索相关作者,请在检索书籍时使用 include。
var books = myContext.Books.Include(nameof(Book.authors));
另一种方法是使用投影来创建匿名类型。
var books = myContext.Books
.Select(b => new {
b.Name,
b.Content,
AuthorNames = b.authors.Select(a => a.Name)
})
.AsEnumerable()
.Select(b => new {
b.Name,
b.Content,
Authors = string.Join(", ", b.AuthorNames)
});
推荐阅读
- html - 如何让孩子不继承动画属性
- android - 无法加载测试广告 Android
- linux - 搜索和重命名目录和子目录中的所有文件
- r - 排队包没有读取任何功能?
- android - ّ片段协程错误:无法在主线程上访问数据库,因为它可能会长时间锁定 UI
- jquery - 如何使用 Jquery 更新特定的 DataTable 单元格
- git - 每次在 git 分支中进行更改时,不使用 no-cache 的 Docker 映像
- python - 简单的神经网络 numpy 错误缺少“exe”
- spring-boot - 为什么日期字段不会在春季启动中进入我的数据库列?
- html - HTML:如何使视频适应 iFrame 大小?