我被捆绑在需要编写的部分代码上。 我得到了一个xml文件,我必须导入并重写,以便我可以在datagridview中显示我需要的内容。这完全是基于一类发票:c#linq分割列表按实体值分为两部分
public class Invoice
{
public bool import { get; set; }
public string InvoiceNbr { get; set; }
public string AltInvoiceNbr { get; set; }
public string CustomerNbr { get; set; }
public string AltCustomerNbr { get; set; }
public DateTime InvoiceDate { get; set; }
public string Amount { get; set; }
public string FreightAmount { get; set; }
public string InsuranceAmount { get; set; }
public string TaxAmount { get; set; }
public string TaxFreightAmount { get; set; }
public int PrintSeq { get; set; }
}
内的importfile有对invoicenbr多个条目。 (每个发票行一个) 所以我做了一个分组和以下声明。
invoices = invoices.GroupBy(i => new
{
i.InvoiceNbr,
i.AltInvoiceNbr,
i.CCN,
i.CustomerNbr,
i.AltCustomerNbr,
i.InvoiceDate,
i.PrintSeq
}).Select(i => new Invoice()
{
InvoiceNbr = i.Key.InvoiceNbr,
AltInvoiceNbr = i.Key.AltInvoiceNbr,
CCN = i.Key.CCN,
CustomerNbr = i.Key.CustomerNbr,
AltCustomerNbr = i.Key.AltCustomerNbr,
InvoiceDate = i.Key.InvoiceDate,
Amount = i.Sum(x => decimal.Parse(x.Amount)).ToString("F"),
FreightAmount = i.Sum(x => decimal.Parse(x.FreightAmount)).ToString("F"),
InsuranceAmount = i.Sum(x => decimal.Parse(x.InsuranceAmount)).ToString("F"),
TaxAmount = i.Sum(x => decimal.Parse(x.TaxAmount)).ToString("F"),
TaxFreightAmount = i.Sum(x => decimal.Parse(x.TaxFreightAmount)).ToString("F"),
PrintSeq = i.Key.PrintSeq
}).ToList();
所以输出在datagridview中看起来不错。现在有一些行,例如对于发票号码出现两次或更多次的信用(或部分出货)。在这种情况下,PrintSeq> 1。
我需要过滤掉这些数据。
例如对于一个信贷有两个条目。 One with InvoiceNbr 20160420-1 with a amount of 50 $ and other with the InvoiceNbr with-amount -50 $。
的printSeq为+ 50 $的发票是1 的printSeq为-50 $发票是2
我试着用
.Where(x=>x.PrintSeq = 1)
过滤,但在这种情况下,一个项目停留在输出。
如果我使用
.Where(x=>x.PrintSeq != 1)
我得到一个列表,它显示了,我不想在输出中显示InvoiceNbrs。
因此,我现在正在搜索使用该列表的可能性,以便用Lambda表达式过滤掉原始输出上的所有invoiceNbrs。
我不要使用外部库等 (distinctby) 我试图通过原始列表上使用不同的(选择发票 其中originallist.invoicenbr IS NOT filterlist.invoicenbr *)首先使用嵌套组,但似乎不是正确的方法。
请帮