每张发票显示 string/int 组独特产品
Per Invoice show string/int array of unique products
我有一张发票清单以及每张发票上的所有产品。
每张发票可以有多个相同产品
class InvoiceProducts
{
public int InvoiceID { get; set; }
public int ProductID { get; set; }
}
var list = new List<InvoiceProducts>();
list.Add(new { InvoiceID = 7000, ProductID=15});
list.Add(new { InvoiceID = 7000, ProductID=10});
list.Add(new { InvoiceID = 7000, ProductID=10});
list.Add(new { InvoiceID = 7000, ProductID=15});
list.Add(new { InvoiceID = 7010, ProductID=12});
list.Add(new { InvoiceID = 7010, ProductID=20});
list.Add(new { InvoiceID = 7010, ProductID=12});
list.Add(new { InvoiceID = 7021, ProductID=1});
list.Add(new { InvoiceID = 7021, ProductID=1});
我可以请求帮助吗
按 InvoiceID 分组,并具有唯一产品的(排序的)整数列表
每张发票
(整理的原因是以后需要和其他相同产品的发票进行匹配)
即
InvoiceID ProductID
7000 10,15
7010 12,20
7021 1
失败的尝试:
var tl2 = List
.GroupBy(x => x.InvoiceID)
.ToDictionary(y => y.Key, y => y.Distinct().ToList());
尝试失败的解释:它有一个按 InvoiceID 正确分组的字典,但发票 7000 有 4 个订单项而不是 2 个唯一产品
你想要 ToLookup
这里 - 它正是为这种情况而设计的。
var lookup = list.ToLookup(x => x.InvoiceID, x => x.ProductID);
这仍将包含重复的产品 ID,但您可以在获取它们时轻松区分它们:
var products = list[7000].Distinct();
或者您可以在列表中使用 Distinct()
:
var lookup = list.Distinct()
.ToLookup(x => x.InvoiceID, x => x.ProductID);
这将适用于使用匿名类型的代码,但如果您实际使用 InvoiceProducts
类型,则 不适 。你总是可以预测:
var lookup = list.Select(x => new { x.InvoiceID, x.ProductID })
.Distinct()
.ToLookup(x => x.InvoiceID, x => x.ProductID);
...或者让您的 InvoiceProducts
类型适当地实现平等。
我有一张发票清单以及每张发票上的所有产品。 每张发票可以有多个相同产品
class InvoiceProducts
{
public int InvoiceID { get; set; }
public int ProductID { get; set; }
}
var list = new List<InvoiceProducts>();
list.Add(new { InvoiceID = 7000, ProductID=15});
list.Add(new { InvoiceID = 7000, ProductID=10});
list.Add(new { InvoiceID = 7000, ProductID=10});
list.Add(new { InvoiceID = 7000, ProductID=15});
list.Add(new { InvoiceID = 7010, ProductID=12});
list.Add(new { InvoiceID = 7010, ProductID=20});
list.Add(new { InvoiceID = 7010, ProductID=12});
list.Add(new { InvoiceID = 7021, ProductID=1});
list.Add(new { InvoiceID = 7021, ProductID=1});
我可以请求帮助吗 按 InvoiceID 分组,并具有唯一产品的(排序的)整数列表 每张发票 (整理的原因是以后需要和其他相同产品的发票进行匹配)
即
InvoiceID ProductID
7000 10,15
7010 12,20
7021 1
失败的尝试:
var tl2 = List
.GroupBy(x => x.InvoiceID)
.ToDictionary(y => y.Key, y => y.Distinct().ToList());
尝试失败的解释:它有一个按 InvoiceID 正确分组的字典,但发票 7000 有 4 个订单项而不是 2 个唯一产品
你想要 ToLookup
这里 - 它正是为这种情况而设计的。
var lookup = list.ToLookup(x => x.InvoiceID, x => x.ProductID);
这仍将包含重复的产品 ID,但您可以在获取它们时轻松区分它们:
var products = list[7000].Distinct();
或者您可以在列表中使用 Distinct()
:
var lookup = list.Distinct()
.ToLookup(x => x.InvoiceID, x => x.ProductID);
这将适用于使用匿名类型的代码,但如果您实际使用 InvoiceProducts
类型,则 不适 。你总是可以预测:
var lookup = list.Select(x => new { x.InvoiceID, x.ProductID })
.Distinct()
.ToLookup(x => x.InvoiceID, x => x.ProductID);
...或者让您的 InvoiceProducts
类型适当地实现平等。