2014-02-16 122 views
2

我有一個如下的場景。其實我得到了預期的結果。但需要避免在一個領域重複。LINQ中避免重複

我有一個自定義類來顯示我的報告中的記錄。像下面的類:

public class MyData 
{ 
    public int ID; 

    public string InvoiceNumber; 

    public string DeliveryNoteNumber; 

    public string QuotationNumber; 
} 

這裏的流量爲 1.報價詳情 2.交貨細節。單一交貨單可以有多個報價 3.發票明細。這裏單張發票可以有多個發貨單。

因此,當我的發票報告中,我需要顯示該發票的所有交貨單需要以逗號分隔的標籤顯示。像所有報價需要以逗號分隔顯示。

這裏我有一個問題。我在一份交貨單中有多個報價單,並將交貨單添加到一張發票​​中。所以在報告中,我可以使用逗號分隔引號,但傳送說明也重複。我用組加入到組的數據和代碼和示例以下

List<MyData> data = new List<MyData>(); 

MyData d1 = new MyData(); 
d1.ID = 1; 
d1.InvoiceNumber = "Inv001"; 
d1.DeliveryNoteNumber = "DN001"; 
d1.QuotationNumber = "Q001"; 
data.Add(d1); 

MyData d2 = new MyData(); 
d2.ID = 1; 
d2.InvoiceNumber = "Inv001"; 
d2.DeliveryNoteNumber = "DN001"; 
d2.QuotationNumber = "Q002"; 
data.Add(d2); 

var source = data.GroupBy(i => new { i.ID, i.InvoiceNumber }) 
     .Select(g => new MyData 
     { 
      ID = g.First().ID, 
      InvoiceNumber = g.Key.InvoiceNumber, 
      DeliveryNoteNumber = string.Join(", ", g.Select(i => i.DeliveryNoteNumber)), 
      QuotationNumber = string.Join(", ", g.Select(i => i.QuotationNumber)), 
     }); 

label1.Text = source.FirstOrDefault().DeliveryNoteNumber; 
label2.Text = source.FirstOrDefault().QuotationNumber; 

輸出在文本框下面:

Text1Result = DN001, DN001 
Text2Result = Q001, Q002 

這裏第一個文本框是問題所在。請給出解決這個問題的想法。或者我需要更改存儲過程以適應此。我的自定義類(MyData)從sp填充(這裏我只是硬編碼)。使用加入報價表,交貨單表和發票表創建的sp

+0

有沒有什麼辦法可以壓縮這一點,所有這些其他細節讓你的問題難以理解。 –

+0

對不起,我會閱讀格式提示。 – Akhil

回答

2

您可以避免在LINQ中使用Distinct()重複。

var source = data.GroupBy(i => new { i.ID, i.InvoiceNumber }) 
      .Select(g => new MyData 
      { 
       ID = g.First().ID, 
       InvoiceNumber = g.Key.InvoiceNumber, 
       DeliveryNoteNumber = string.Join(", ", g.Select(i => i.DeliveryNoteNumber).Distinct()), 
       QuotationNumber = string.Join(", ", g.Select(i => i.QuotationNumber).Distinct()), 
      }); 
+0

Nossa que gambiarra braba –