我有一个实体有一个我不想有时返回的字段。
我现在正将它设置为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;
}
答案 0 :(得分:1)
您正在寻找的是投影,这是您希望从服务器投影到结果集中的内容。
在EF投影中,您可以通过查询的选择行和您已完成的任何包含的组合来完成。
如果附件是由导航属性访问的第二个表,它将不会被您当前的查询返回(IE将为null),除非您正在进行延迟加载(通常由nav属性上的virtual关键字表示,例如{{1 }})。如果附件是列投影则更复杂
您有2个选项,使用自治类型,例如:
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*/});
请注意不会跟踪自定义投影,因此更改属性并调用save不会起作用。