c# - 如何仅包含相关实体的选定属性

标签 c# entity-framework-core

我只能包括相关实体。

using (var context = new BloggingContext()) 
{ 
    // Load all blogs, all related posts
    var blogs1 = context.Blogs 
                       .Include(b => b.Posts) 
                       .ToList(); 
}

但是,我不需要整个 BlogPost 实体。我只对特定的属性感兴趣,例如:
using (var context = new BloggingContext()) 
{ 
    // Load all blogs, all and titles of related posts
    var blogs2 = context.Blogs 
                       .Include(b => b.Posts.Select(p => p.Title) //throws runtime exeption
                       .ToList(); 

    foreach(var blogPost in blogs2.SelectMany(b => b.Posts))
    {
        Console.Writeline(blogPost.Blog.Id); //I need the object graph
        Console.WriteLine(blogPost.Title); //writes title
        Console.WriteLine(blogPost.Content); //writes null
    }
}

最佳答案

您可以使用 Include加载整个实体,或者您将需要的内容投影到 .Select :

var blogs2 = context.Blogs 
    .Select(x => new 
    {
        BlogName = x.BlogName, //whatever
        PostTitles = x.Post.Select(y => y.Title).ToArray()
    }) 
   .ToList(); 

或者,您可以执行以下操作:
var blogs2 = context.Blogs 
    .Select(x => new 
    {
        Blog = x,
        PostTitles = x.Post.Select(y => y.Title).ToArray()
    }) 
   .ToList(); 

一个 Select当您不需要整个 child 时总是更好,因为它可以防止查询不需要的数据。

关于c# - 如何仅包含相关实体的选定属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48462746/

相关文章:

entity-framework-core - 在指定场景下是否值得将 Dotnet Standard 2.1 迁移到 .Net 6

c# - 如何使用 Selenium 检查复选框状态?

c# - 为什么我无法在此 iText\iTextSharp 页脚表格中获取圆角?

C# 通过 linq connect 模型中的语言从数据库获取合适的字段

c# - 在 Linq C# 中按单列分组

c# - CreateParameter 上的 ASP.NET 5 vNext EF7 SQLite TypeLoadException

c# - 如何在类库中添加配置文件,然后是 .NET Core 1.1 的连接字符串

c# - 原始 SQL 查询和 Entity Framework Core

c# - App.config 设置,环境变量作为部分路径

c# - 使用连接字符串 Entity Framework 在运行时生成 DbContext 和模型