【发布时间】:2019-06-25 22:34:37
【问题描述】:
我正在尝试将此循环复制为 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(来自图书表))
【问题讨论】:
-
你能分享
AuthorList类型吗? -
为什么是
a.AuthorId.ToString() == Id?如果基础类型是数字,则将参数更改为正确的类型并写入a.AuthorId == Id。这非常重要。强制转换为字符串会阻止使用任何涵盖AuthorId的索引。如果Id包含前导0或空格,则比较失败 -
您的循环显示了一件事,而查询则完全不同。你到底想做什么?解释你想要什么,而不是你如何尝试实现它。您想要为每本书和作者单独记录吗?或者只是每本书的第一作者?