2014-02-16 92 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 –