0
我有以下实体结构。我有几个装饰,将填充Invoice.InvoiceLines,并在结束时,我想OrderReference使用linq按深度级/实体字段按集合排序
public class Invoice
{
private readonly IList<InvoiceLine> _invoiceLines;
public virtual IList<InvoiceLine> InvoiceLines => _invoiceLines;
public Invoice()
{
_invoiceLines = new List<InvoiceLine>();
}
}
public class InvoiceLine
{
private readonly IList<TransactionLine> _transactionLines = new List<TransactionLine>();
public virtual IReadOnlyCollection<TransactionLine> TransactionLines => new ReadOnlyCollection<TransactionLine>(_transactionLines);
public virtual void AddTransactionLine(TransactionLine transactionLine)
{
transactionLine.ThrowIfNull(nameof(transactionLine), "can't be null");
_transactionLines.Add(transactionLine);
}
}
public class PermanentPlacementTransactionLine : TransactionLine
{
public PermanentPlacement PermanentPlacement { get; set; }
}
public class PermanentPlacement
{
public virtual string JobReference { get; set; }
public virtual string OrderReference { get; set; }
}
我想要做的是OrderReference订单发票行命令实施invoicelines。
foreach (var invoice in DecoratedResult.Invoices.Where(inv => inv.InvoiceType == InvoiceType.Weekly))
{
var customer = CustomerRepository.FetchByAccountNumber(invoice.CustomerAccountNumber);
if (customer.InvoiceProperties.InvoiceSequence == InvoiceSequence.OrderReference)
{
// order by fields at deep level.
// invoice.InvoiceLines.OrderBy(i => i.TransactionLines.OfType<PermanentPlacementTransactionLine>());
}
}
我可以公开属性,以invoiceline,然后进行相应的设置,但有什么办法,我可以使用LINQ做到这一点。
看看https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b,你会发现一个排序依据的方法。 –
问题是,无论何时向列表中添加新项目,都希望它们在最后进行,因此列表会停止排序?如果是这样'SortedList'(https://msdn.microsoft.com/en-us/library/system.collections.sortedlist(v=vs.110).aspx)可能会对你感兴趣。否则,我有点不确定你的问题在哪里。 – Chris
我注意到它看起来只有一些'TransactionLine'对象(那些类型为'PermanentPlacementTransactionLine')的对象上有OrderReference。你想用其他类型的TransactionLine做什么?你需要更好地指定这个... – Chris