asp.net - LINQ IQueryable 嵌套循环
问题描述
我正在尝试将此循环复制为 IQueryable:
foreach (var book in BookList)
{
foreach (var a in book.Authors)
{
if (a.AuthorId.ToString() == Id)
{
AuthorView = new AuthorViewModel(a, item.BookId);
}
}
}
我努力了:
var Test = _context.Book.Include(x => x.Authors)
SelectMany(y => y.Authors).ToList().FirstOrDefault(x => x.AuthorId.ToString() == Id)
.Select(x => new AuthorViewModel(x, ??.BookId);
但是我在尝试创建对象 AuthorViewModel 时遇到了困难,因为它需要我无法再访问的 BookId。有没有办法传递书籍ID?
对不起,仅仅发布示例没有意义。
Books 是数据库中的一个表。Authors 是数据库中的一个表,其中包含许多作者。
Book:
BookId
Authors
Authors:
AuthorId
Name
DOB
AuthorList 应该是 BookList(列表)。我已经纠正了这一点。
我正在尝试根据作者 ID 定位作者 - 并将其返回一个对象(作者、BookId(来自图书表))
解决方案
如果您深入研究作者(SelectMany),那么您将无法返回书籍。AuthorId 的条件需要在内部处理。
var Test = _context.Book.Include(x => x.Authors)
.FirstOrDefault(x => x.Authors.Any(y => y.AuthorId.ToString() == Id))
.Select(x => new AuthorviewModel(x,x.BookId);
当然,这将只为每位作者选择一本书,就像您的代码一样。我想知道你想要的行为是否是得到所有的书......
推荐阅读
- c++ - 在多个文件之间共享变量时如何理解extern的用法?
- c++ - 如何将 uintptr_t 值设置为非 uintptr_t 函数的地址?
- google-cloud-platform - 将弹性 IP 重新分配给 Compute Engine for Google Cloud
- android - androidx 使用 SQLiteDiskIOException 使应用程序崩溃
- angular - 推迟组件初始化,直到 jwt 令牌在本地存储中可用
- c# - NDesk 不会抛出预期的异常
- scons - SConscript EnvironmentError:没有名为compile_db的模块
- javascript - 根据两个下拉值过滤内容
- sql - 执行排除特定分区名称的 SQL 查询
- javascript - 每次我击中桨画布时添加额外的球对象