首页 > 解决方案 > 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(来自图书表))

标签: asp.netlinq

解决方案


如果您深入研究作者(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);

当然,这将只为每位作者选择一本书,就像您的代码一样。我想知道你想要的行为是否是得到所有的书......


推荐阅读