私は書く必要があるコードの一部に縛られてしまいました。 私はインポートして再加工しなければならないxmlファイルを持っているので、私はDataGridviewで必要なものを表示することができます。すべてがクラスに基づいています。請求書:C#linqはエンティティ値で2つの部分に分割します
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; }
}
インボイスチェンには複数のエントリがあります。 (請求書明細ごとに1つ) 私は次のステートメントでグループ化しました。
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でうまく見えます。現在、いくつかの行があります。請求書番号が2回以上現れるクレジット(または部分的な出荷)の場合。この場合、PrintSeqは> 1です。
私はそのデータを除外する必要があります。
クレジットのために2つのエントリがあります。 金額が50 $のInvoiceNbr 20160420-1と、金額が-50 $の同じInvoiceNbrを持つ の1つ。
printSeq + 50 $のために請求書が-50 $請求書1. printSeqである私は
.Where(x=>x.PrintSeq = 1)
でフィルタリングしてみました2.
であるが、この場合、1つのエントリがにとどまります出力。
私は
.Where(x=>x.PrintSeq != 1)
を使用している場合は、私は私が出力に表示したくないInvoiceNbrsを示しリストを得ます。
ここで、そのリストを使用して、元の出力のすべての請求書Nbrをラムダ式で除外することができます。
(originallist.invoicenbrがfilterlist.invoicenbrれていません請求書 SELECT * FROM)
私はが外部ライブラリを使用したくないなど (distinctby) 私は、元のリストに明確な使用しようとしました最初にネストしたグループを使用していますが、それは正しい方法ではないようです。
助けてください