C# 从自定义实体列表创建字典的最佳LINQ方法

C# 从自定义实体列表创建字典的最佳LINQ方法,c#,linq,C#,Linq,我有一个DeleteByVendor对象的列表。。它有两个业务实体–供应商和pricepage。。一个价格页可以有多个供应商。。一个供应商可以出现在多个价格页中 我们需要创建一个字典,其中包含每个价格页以及该价格页中存在的(不同的)供应商的数量。在那本词典中,一页价格页只能出现一次 我们如何使用LINQ链方法方法来实现这一点 注:对于“P3”,计数应为1(尽管存在重复记录) 类程序 { 静态void Main(字符串[]参数) { 列表供应商ForPages=新列表(); DeleteByVen

我有一个DeleteByVendor对象的列表。。它有两个业务实体–供应商和pricepage。。一个价格页可以有多个供应商。。一个供应商可以出现在多个价格页中

我们需要创建一个字典,其中包含每个价格页以及该价格页中存在的(
不同的
)供应商的数量。在那本词典中,一页价格页只能出现一次

我们如何使用
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()
                                                       );