在LINQ查詢上使用“包含”方法時出錯

asp.net-core c# entity-framework entity-framework-core linq

在我的ASP.NET MVC核心項目中的以下LINQ查詢中,我收到以下錯誤Unable to cast object of type 'System.Linq.Expressions.NewExpression' to type 'System.Linq.Expressions.MemberExpression' 。錯誤發生在下面代碼的最後一行:

public async Task<IActionResult> Index()
{
    var qry = from b in _context.Blogs
                join p in _context.Posts on b.BlogId equals p.BlogId into bp
                from c in bp.DefaultIfEmpty()
                select new { b.BlogId, b.Url, c.Title, c.Content, c.Blog };
    var bloggingContext = qry.Include(p => p.Blog);
    return View(await bloggingContext.ToListAsync());
}

型號 :來自這個官方的ASP.NET教程

namespace ASP_Core_Blogs.Models
{
    public class BloggingContext : DbContext
    {
        public BloggingContext(DbContextOptions<BloggingContext> options)
            : base(options)
        { }

        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }

        public List<Post> Posts { get; set; }
    }

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }

        public int BlogId { get; set; }
        public Blog Blog { get; set; }
    }
}

一般承認的答案

您不能在匿名類型的IQueryable上使用Include。 Include是用於急切加載導航屬性的方法。它只能在具有導航屬性的IQueryable of Entity上使用。典型用法:

var qry = _context.Blogs.Include(p=>p.Posts).ToArray();

它返回每個帖子中加載了博客的Post數組。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow