我有一个如下所示的场景。事实上我得到了预期的结果。但需要避免在一个字段中重复。
我有一个自定义类来显示报告中的记录。类如下:
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
最佳答案
您可以在 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()),
});
关于c# - 避免 LINQ 中的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21807339/