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

本文关键字:实体 一部分 框架 获取 | 更新日期: 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将不起作用。

相关文章: