繁体   English   中英

实体框架,成为实体的一部分

[英]Entity Framework, Getting part of an entity

我有一个只有一个字段的实体,有时不想返回。

我现在将其设置为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中,投影是通过查询的选择行和已完成的所有包含的组合来完成的。

如果附件是导航属性访问的第二张表,除非您正在进行延迟加载(通常由nav属性上的virtual关键字表示,例如public virtual Attachment Attachment {get;set;}否则它不会由当前查询返回(IE将为null))。 public virtual Attachment Attachment {get;set;} )。 如果附件是列投影则更复杂

您有2个选项,请使用匿名类型,例如:

_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*/});

请注意,自定义投影不会被跟踪,因此更改属性和调用保存将无法工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM