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'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を使用できません。インクルードはナビゲーションプロパティを熱心に読み込むためのメソッドです。ナビゲーションプロパティを持つEntityのIQueryableでのみ使用できます。典型的な使用法:

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

各投稿にブログが読み込まれた投稿の配列を返します。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ