实体框架,获取实体的一部分
本文关键字:实体 一部分 框架 获取 | 更新日期: 2023-09-27 18:07:04
我有一个包含一个字段的实体,有时我不想返回。
我现在将其设置为null。有没有一种方法来指定这在查询本身,而不是清除它像我在这里?
public async Task<IQueryable<XYZXY>> GetStuff()
{
histories =
_db.Stuffs
.Where(n => n.NationId == User.NationId)
.OrderBy(x => x.DateSent);
await histories.ForEachAsync(d => d.Attachment = null);
return histories;
}
你正在寻找的是所谓的投影,这是你想要从服务器投影到你的结果集中的东西。
在EF中,投影是通过查询的选择行和您所做的任何include的组合来完成的。
如果附件是由导航属性访问的第二个表,它不会由你当前的查询返回(IE它将是null),除非你正在做懒惰加载(通常由虚拟关键字在导航属性上表示如public virtual Attachment Attachment {get;set;}
)。如果附件是列,则投影更复杂
你有两个选项,使用一个匿名的类型,例如:
_db.Stuffs
.Where(n => n.NationId == User.NationId)
.OrderBy(x => x.DateSent)
.Select(x=> new { A = x.A, B = x.B .... /*Dont list attachment*/});
或重用现有对象
_db.Stuffs
.Where(n => n.NationId == User.NationId)
.OrderBy(x => x.DateSent)
.Select(x=> new Stuff { A = x.A, B = x.B .... /*Dont list attachment*/});
请注意,自定义投影将不会被跟踪,因此更改属性和调用save将不起作用。