Я хотел бы заполнить два объекта, которые имеют родительские дочерние отношения.Два объекта 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;}
}
Я хотел бы использовать LINQ to XML с синтаксисом Lambda для получения данных XMLв объекты.Проблема, с которой я сталкиваюсь, заключается в том, что вызов API, который получает информацию, возвращает несколько платежей.Однако я мог бы сделать один вызов API для каждого платежа, что было бы неэффективно, если бы я мог сделать один вызов API, передав все свои идентификаторы платежей и вернув все данные.Проблема в том, что я запутался в том, как разобрать его, чтобы получить коллекцию объектов Payment.Возможно ли это, или мне нужно будет совершать отдельные вызовы 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>
Кроме того ... Мне нужно иметь возможность отфильтровывать счета, которые не имеют буквы K
вInvoiceId
.Например 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>();