【发布时间】:2018-05-25 22:26:18
【问题描述】:
我想填充两个具有父子关系的对象。这两个对象是Payment 和Invoice。每个Payment 可以应用于多个Invoice 对象,因为客户可以编写单笔付款来支付多张发票。
class Payment
{
public string PaymentId {get; set;}
public decimal PaymentAmount {get; set;}
public List<Invoice> InvoiceCollection {get; set;} // Collection of Invoices
}
class Invoice
{
public string InvoiceId {get; set;}
public decimal InvoiceAmount {get; set;}
public DateTime InvoiceDate {get; set;}
}
我想使用带有 Lambda 语法的 LINQ to XML 将 XML 数据放入对象中。我遇到的问题是获取信息的 API 调用返回多笔付款。但是,我可以为每次付款进行一次 API 调用,但当我可以进行一次 API 调用并传入我的所有付款 ID 并取回所有数据时,这将是低效的。问题是我对如何解析它以获取付款对象的集合感到困惑。是否可以或者我需要为每次付款进行单独的 API 调用?
<payment>
...
</payment>
<payment>
<paymentId>7400</paymentId>
<paymentAmount>540</paymentAmount>
<paymentDate>05/22/2018</paymentDate>
<invoice>
<invoiceId>KADS333</invoiceId>
<invoiceAmount>175</invoiceAmount>
<invoiceDate>4/27/2018</invoiceDate>
</invoice>
<invoice>
<invoiceId>53222</invoiceId>
<invoiceAmount>300</invoiceAmount>
<invoiceDate>4/04/2018</invoiceDate>
</invoice>
<invoice>
<invoiceId>KAZO111</invoiceId>
<invoiceAmount>65</invoiceAmount>
<invoiceDate>3/12/2018</invoiceDate>
</invoice>
</payment>
<payment>
...
</payment>
另外...我需要能够过滤掉任何在InvoiceId 中没有字母K 的发票。例如53222。 (这些是机场代码,K 总是出现在机场代码中。)
这是我开始使用的 Linq,但我在填充 PaymenModel 和 InvoiceModel(PaymentModel 的属性)时遇到问题。
List<PaymentModel> paymentDetails = xml.Descendants("payment")
.Where(
d => d.Element("invoiceId").Value.Contains("K")
)
.Select(x => new Invoice
{
InvoiceId = x.Element("invoiceId").Value.ToString(),
InvoiceAmount = (decimal)x.Element("invoiceAmount"),
InvoiceDate = (DateTime)x.Element("invoiceDate")
}).ToList<InvoiceModel>();
【问题讨论】:
标签: c# lambda linq-to-xml