目前,我的问题是我从SQL查询返回结果,返回的结果如下:
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#调用代码时,它将放置在遵循此结构的对象中:
ProductTermAndPricingDataItem A:
public int ProductID { get; set; }
public string BillingPeriodName { get; set; }
public decimal PriceAmount { get; set; }
public string PriceTypeName { get; set; }
然后我需要将该对象转换为遵循这种格式的另一个对象:
public class ProductPricingGetDataItem : IDataItem
{
public int ProductID { get; set; }
private List<Terms> _terms = new List<Terms>();
public List<Terms> Terms
{
get => _terms;
set => _terms = value;
}
}
public partial class Terms {
public string Term { get; set; }
public decimal Price { get; set; }
}
其中条款= BillingPerioidName,而价格= PriceAmount。我不确定执行此操作的最佳方法。我当前的代码是:
foreach (ProductTermAndPricingDataItem item in productInformationItems)
{
ProductPricingGetDataItem productPricingGetDataItem = new ProductPricingGetDataItem();
productPricingGetDataItem.ProductID = item.ProductID;
productPricingGetDataItem.ProductName = item.ProductName;
}
我只是在如何创建术语而不引起无数循环的情况下遇到问题。
您可以使用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;
}
带有工作示例的小提琴:https://dotnetfiddle.net/EE2BpP
您可以使用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爱好者:
//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();
在您的确切情况下,结果是:
随时询问是否不清楚。