如何使用EF从导航属性中仅选择特定列

时间:2017-01-18 09:46:28

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

我正在尝试从导航属性中仅选择2列但无法执行此操作,任何人都可以告诉我如何实现此目的?

它的默认方式很好(选择所有列):

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

我想要的是什么:

从employee,productmaster和供应商表中仅选择2列。

我知道如何选择是否只有一张表:

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

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

非常感谢任何帮助。

提前致谢。

3 个答案:

答案 0 :(得分:1)

试试这个:

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属性来检索数据。

答案 1 :(得分:0)

您可以使用:

background

答案 2 :(得分:0)

如果启用了延迟加载,则可以直接使用

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

否则你必须采用内连接并在单选中选择单个列。