【问题标题】:How to select only particular columns from navigation properties using EF如何使用 EF 从导航属性中仅选择特定列
【发布时间】:2017-06-02 15:09:21
【问题描述】:

我试图从导航属性中仅选择 2 列,但无法做到,谁能告诉我如何才能做到这一点?

默认方式效果很好(选择所有列):

  var productreceipts = db.productreceipts.Include(p => p.employee).Include(p => p.productmaster).Include(p => p.vendor);

我想要什么:

从employee、productmaster、vendor 表中仅选择2 列。

如果我只有一张桌子,我知道如何选择:

var productreceipt = db.productreceipts.Select(p => new { p.ReceiptId, p.ReceivedBy });

编辑: 我想选择第一个表(productreceipts)的所有属性,只选择其他几个。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

  • .Select(p => new { propertyName = p.productmaster.SomeProperty }

标签: c# asp.net-mvc entity-framework eager-loading navigation-properties


【解决方案1】:

你可以像这样使用:

  var productreceipts = db.productreceipts.Include(p => p.employee).
                                          .Select(p => new { propertyName = p.productmaster.SomeProperty })

【讨论】:

【解决方案2】:

如果你开启了延迟加载,那么你可以直接使用

.Select(p => new { ProductId = p.productmaster.ProductId }

否则,您将不得不进行内部连接并在单选中选择各个列。

【讨论】:

  • 这里不涉及延迟加载。这将在不启用延迟加载的情况下工作。
【解决方案3】:

试试这个:

var productreceipt = db.productreceipts
    .Select(p => 
    new {   productreceipts_prop_1 = p.productreceipts_prop_1,
            productreceipts_prop_2 = p.productreceipts_prop_2,
            productreceipts_prop_3 = p.productreceipts_prop_3,
            productreceipts_prop_4 = p.productreceipts_prop_4,

            employee_prop_1 = p.employee.employee_prop_1,
            employee_prop_2 = p.employee.employee_prop_2,

            productmaster_prop_1 = p.productmaster.productmaster_prop_1,
            productmaster_prop_2 = p.productmaster.productmaster_prop_2,

            vendor_prop_1 = p.vendor.vendor_prop_1,
            vendor_prop_1 = p.vendor.vendor_prop_1,
    });

编辑:

不需要使用.Include(),可以直接使用navigator属性来检索数据。

【讨论】:

  • 酷这看起来不错,但我们不能缩短它,这意味着为什么要为第一个表手动选择所有属性(产品收据)
  • 你也可以这样做,但是你会收到productreceipts类的对象,所有的属性都在里面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
相关资源
最近更新 更多