gpt4 book ai didi

c# - 避免在 LINQ 中重复

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:56 25 4
gpt4 key购买 nike

我有如下场景。其实我得到了预期的结果。但需要避免在一个字段中出现重复。

我有一个自定义类来在我的报告中显示记录。类如下:

public class MyData
{
public int ID;

public string InvoiceNumber;

public string DeliveryNoteNumber;

public string QuotationNumber;
}

这里是流程一、报价明细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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com