从具有重复数据的 SQL 结果创建键值对
Creating key-value pairs from SQL result that have duplicate data
我目前的问题是 SQL 查询返回的结果 returns 是这样的结果:
125 Month 10.00 Wholesale
125 Year 20.00 Wholesale
126 Month 20.00 Wholesale
126 Year 30.00 Wholesale
127 Month 40.00 Wholesale
127 Year 50.00 Wholesale
其中整数列是列的 ID。
当数据返回到 C# 调用代码时,它被放入遵循此结构的对象中:
产品名称;
}
我只是对如何在不引起无限循环的情况下创建术语有疑问。
您可以使用 Dictionary 这样您将拥有一个键值对。键是 ProductID
,值是 Terms
.
的列表
var dictionary = new Dictionary<int, List<Terms>>();
foreach (ProductTermAndPricingDataItem item in productInformationItems)
{
if(dictionary.ContainsKey(item.ProductID))
{
dictionary[item.ProductID].Add(new Terms { Term = item.BillingPeriodName, Price = item.PriceAmount});
}
else
{
dictionary.Add(item.ProductID, new List<Terms>() { new Terms() {Term = item.BillingPeriodName, Price = item.PriceAmount } });
}
}
您可以使用 Linq 和 GroupBy
:
List<ProductPricingGetDataItem> grouped = productInformationItems.GroupBy(
p => p.ProductID,
(key, g) => new ProductPricingGetDataItem() { ProductID = key, Terms = g.Select(x => new Terms(x.BillingPeriodName, x.PriceAmount)).ToList() }).ToList();
为了使该代码正常工作,您需要向 Terms
添加一个构造函数:
public Terms(string term, decimal price)
{
Term = term;
Price = price;
}
Fiddle 工作示例:https://dotnetfiddle.net/EE2BpP
对于 LINQ 爱好者:
//Your initial data list
var productInformationItems = new List<ProductTermAndPricingDataItem>();
var productPricingGetDataItems = productInformationItems.ToLookup(item => item.ProductID)
.Select(grouping => new ProductPricingGetDataItem
{
ProductID = grouping.Key,
Terms = grouping.Select(item => new Terms
{
Price = item.PriceAmount,
Term = item.BillingPeriodName
}).ToList()
}).ToList();
在您的确切情况下,结果是:
有什么不明白的地方尽管问。
我目前的问题是 SQL 查询返回的结果 returns 是这样的结果:
125 Month 10.00 Wholesale
125 Year 20.00 Wholesale
126 Month 20.00 Wholesale
126 Year 30.00 Wholesale
127 Month 40.00 Wholesale
127 Year 50.00 Wholesale
其中整数列是列的 ID。 当数据返回到 C# 调用代码时,它被放入遵循此结构的对象中:
产品名称; }
我只是对如何在不引起无限循环的情况下创建术语有疑问。
您可以使用 Dictionary 这样您将拥有一个键值对。键是 ProductID
,值是 Terms
.
var dictionary = new Dictionary<int, List<Terms>>();
foreach (ProductTermAndPricingDataItem item in productInformationItems)
{
if(dictionary.ContainsKey(item.ProductID))
{
dictionary[item.ProductID].Add(new Terms { Term = item.BillingPeriodName, Price = item.PriceAmount});
}
else
{
dictionary.Add(item.ProductID, new List<Terms>() { new Terms() {Term = item.BillingPeriodName, Price = item.PriceAmount } });
}
}
您可以使用 Linq 和 GroupBy
:
List<ProductPricingGetDataItem> grouped = productInformationItems.GroupBy(
p => p.ProductID,
(key, g) => new ProductPricingGetDataItem() { ProductID = key, Terms = g.Select(x => new Terms(x.BillingPeriodName, x.PriceAmount)).ToList() }).ToList();
为了使该代码正常工作,您需要向 Terms
添加一个构造函数:
public Terms(string term, decimal price)
{
Term = term;
Price = price;
}
Fiddle 工作示例:https://dotnetfiddle.net/EE2BpP
对于 LINQ 爱好者:
//Your initial data list
var productInformationItems = new List<ProductTermAndPricingDataItem>();
var productPricingGetDataItems = productInformationItems.ToLookup(item => item.ProductID)
.Select(grouping => new ProductPricingGetDataItem
{
ProductID = grouping.Key,
Terms = grouping.Select(item => new Terms
{
Price = item.PriceAmount,
Term = item.BillingPeriodName
}).ToList()
}).ToList();
在您的确切情况下,结果是:
有什么不明白的地方尽管问。