实体框架,获得实体的一部分

时间:2015-08-08 20:06:36

标签: c# entity-framework

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

我现在正将它设置为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;

    }

1 个答案:

答案 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不会起作用。