我只能包括相关实体。
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/