我有一个如下情景。实际上我得到了预期的结果。但需要避免在一个字段中重复。
我有一个自定义类来在我的报告中显示记录。类如下:
public class MyData
{
public int ID;
public string InvoiceNumber;
public string DeliveryNoteNumber;
public string QuotationNumber;
}
这里的流程是 1.报价详情 2.交货细节。单一交货单可以是多个报价单 3.发票明细。此处单张发票可以包含多个交货单。
因此,当我的发票报告显示我需要显示该发票的所有发货单时,需要以逗号分隔的标签显示。像所有报价一样,需要用逗号分隔显示。
我有一个问题。我在一份送货单中有多个报价单,并将该送货单添加到一张发票中。因此,在报告中,我可以用逗号分隔显示引用,但交付注释也是重复的。我使用Group Join对数据和代码进行分组,示例如下:
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 :(得分: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()),
});