C# 从自定义实体列表创建字典的最佳LINQ方法
我有一个DeleteByVendor对象的列表。。它有两个业务实体–供应商和pricepage。。一个价格页可以有多个供应商。。一个供应商可以出现在多个价格页中 我们需要创建一个字典,其中包含每个价格页以及该价格页中存在的(C# 从自定义实体列表创建字典的最佳LINQ方法,c#,linq,C#,Linq,我有一个DeleteByVendor对象的列表。。它有两个业务实体–供应商和pricepage。。一个价格页可以有多个供应商。。一个供应商可以出现在多个价格页中 我们需要创建一个字典,其中包含每个价格页以及该价格页中存在的(不同的)供应商的数量。在那本词典中,一页价格页只能出现一次 我们如何使用LINQ链方法方法来实现这一点 注:对于“P3”,计数应为1(尽管存在重复记录) 类程序 { 静态void Main(字符串[]参数) { 列表供应商ForPages=新列表(); DeleteByVen
不同的
)供应商的数量。在那本词典中,一页价格页只能出现一次
我们如何使用LINQ链方法方法来实现这一点
注:对于“P3”,计数应为1(尽管存在重复记录)
类程序
{
静态void Main(字符串[]参数)
{
列表供应商ForPages=新列表();
DeleteByVendor item1=新的DeleteByVendor(){VendorID=“V1”,VendorName=“Vendor1”,PricePage=“P1”,Description=“Description1”};
DeleteByVendor item2=新的DeleteByVendor(){VendorID=“V2”,VendorName=“Vendor2”,PricePage=“P1”,Description=“Description1”};
DeleteByVendor item3=新的DeleteByVendor(){VendorID=“V1”,VendorName=“Vendor1”,PricePage=“P2”,Description=“Description2”};
DeleteByVendor item4=新的DeleteByVendor(){VendorID=“V1”,VendorName=“Vendor1”,PricePage=“P3”,Description=“Description3”};
//复制品
DeleteByVendor item5=新的DeleteByVendor(){VendorID=“V1”,VendorName=“Vendor1”,PricePage=“P3”,Description=“Description3”};
Dictionary costPageVendorsCount=新建字典();
}
}
公共类DeleteByVendor
{
公共字符串VendorID{get;set;}
公共字符串VendorName{get;set;}
公共字符串PricePage{get;set;}
公共字符串说明{get;set;}
}
首先使用GroupBy
方法按PricePage
对列表进行分组。然后使用ToDictionary
获取字典
var results = vendorsForPages.GroupBy(v => v.PricePage)
.ToDictionary(g => g.Key,
g => g.Select(x => x.VendorID)
.Distinct()
.Count());
您可以按PricePage
进行分组,然后按VendorId
进行分组:
var costPageVendorsCount = vendorsForPages.GroupBy(v => v.PricePage)
.ToDictionary(g => g.Key,
g => g.GroupBy(gg => gg.VendorID)
.Count()
);
但这并不是唯一的供应商数量。。对于“P3”,显示为计数2。应该是1
var costPageVendorsCount = vendorsForPages.GroupBy(v => v.PricePage)
.ToDictionary(g => g.Key,
g => g.GroupBy(gg => gg.VendorID)
.Count()
);