在Entity Framework Core 2.2上,我具有以下实体:
public class Post {
public Int32 Id { get; set; }
public string Type { get; set; }
public virtual Collection<File> Files { get; set; }
}
public class File {
public Int32 Id { get; set; }
public Int32 PostId { get; set; }
public String Name { get; set; }
public Byte[] Content { get; set; }
public virtual Post Post { get; set; }
}
我需要获取文件ID和帖子名称的列表,而无需将其内容加载到内存中。
IQueryable<Post> posts = _context.Posts.AsNoTracking();
posts = posts.Include(x => x.File);
var files = await posts
.Where(x => x.Type == "design")
// Remaining Query
我认为使用“包含”的瞬间文件将被加载到内存中。不?
获取帖子文件ID和名称列表而不将其内容加载到内存中的正确方法是什么?
答案 0 :(得分:1)
我需要获取文件ID和帖子名称的列表,而无需将其内容加载到内存中。
获取帖子文件ID和名称列表而不将其内容加载到内存中的正确方法是什么?
一旦您说要获得a Post
,然后又说要获得a list of Post
。
因此,要获取a Post
及其文件(仅ID和名称),您可以按以下方式编写查询:
var post = await _context.Posts.Where(yourCondition).Select(p => new
{
p.Id,
p.Type
Files = p.Files.Select(f => new {f.Id,f.Name}).ToList()
}).FirstOrDefaultAsync();
要获取list of Posts
及其文件(仅ID和名称),您可以按以下方式编写查询:
var posts = await _context.Posts.Where(yourCondition).Select(p => new
{
p.Id,
p.Type
Files = p.Files.Select(f => new {f.Id,f.Name}).ToList()
}).ToListAsync();
注意:如果需要强类型输入,则可以编写如下:
Post post = await _context.Posts.Where(yourCondition).Select(p => new Post
{
Id = p.Id,
Type = p.Type
Files = p.Files.Select(f => new File {f.Id,f.Name}).ToList()
}).FirstOrDefaultAsync();