【发布时间】:2017-08-31 16:04:11
【问题描述】:
我有以下工作实体框架代码,用于从实体框架结果创建 DTO。它创建了 InvoiceDTO 对象,其中包含 List<ServiceChargeDTO> 属性。这是参考Mapping Linq Query results to a DTO class
public class InvoiceDTO
{
public int InvoiceID { get; set; }
public List<ServiceChargeDTO> ServiceChargeLineItems { get; set; }
public decimal InvoiceTotal { get; set; }
}
public InvoiceDTO GetInvoiceByID(int invoiceIDParam)
{
InvoiceDTO invoice=null;
using (var db = new PortalEntities())
{
var invoices = from a in db.Invoices
where a.InvoiceID == invoiceIDParam
select new InvoiceDTO
{
InvoiceID = a.InvoiceID,
InvoiceTotal = a.InvoiceAmount,
ServiceChargeLineItems =
(from b in db.InvoiceServiceXrefs
where a.InvoiceID == b.InvoiceID
select new ServiceChargeDTO
{
ServiceChargeID = b.ServiceChargeID,
Quantity = b.ServiceCharge.Qty,
UnitPrice=b.ServiceCharge.UnitPrice,
Amount=b.ServiceCharge.Amount
}
).ToList()
};
invoice = invoices.FirstOrDefault();
}
return invoice;
}
此处已成功检索到相关表中的数据。
InvoiceServiceXrefs.ServiceCharge.Qty
我需要改变这种方法并使其成为 convert 方法。
public InvoiceDTO GetInvoiceByID(int invoiceIDParam)
{
var invoice2 = null;
using (var db = new PortalEntities())
{
var invoices2 = from b in db.Invoices
where b.InvoiceID == invoiceIDParam
select b;
invoice2 = ToInvoiceDTO(invoices2.FirstOrDefault());
}
return invoice2;
}
但是当我输入invoice.InvoiceServiceXrefs. 时,导航属性没有被列出。
如何正确获取导航属性并使用List<ServiceChargeDTO> 创建InvoiceDTO 对象?
【问题讨论】:
-
invoice.InvoiceServiceXrefs是一个集合。与第一个代码 sn-p (from b in db.InvoiceServiceXrefs) 类似,您必须对其进行迭代才能使用它包含的实体。但是请注意,这种ToInvoiceDTO方法效率较低:它会触发多个查询。 -
invoice参数的类型是Invoice,而不是InvoiceDTO,并且您没有为名为Invoice的类显示任何代码 -
@Lijo 是否有任何答案有助于回答您的问题?你能更新一下吗?
-
坦率地说,我不明白赏金。如果您在我上面的评论后仍有疑问,您可以简单地问。现在我不知道你还有什么不清楚的地方。
-
您需要通过 InvoiceServiceXrefs 进行交互。在此之前,您还需要在 FirstOrDefault() 调用之前急切加载它,因为它不会为您带来 InvoiceServiceXrefs
标签: c# entity-framework linq