我已经定义了这样一个类:
public class GroupedItem
{
public DateTime _Date { get; set; }
public int Sales { get; set; }
public float TransactionPrice { get; set; }
public string Seller { get; set; }
// Part used for calculation
public float BestSellerAveragePrice { get; set; }
public float MinPrice { get; set; }
public float MaxPrice { get; set; }
}
然后我填写了一个GroupedItem类型列表,如下所示:
List<GroupedItem> _groupedItems = new List<GroupedItems>();
让我们说这个列表有300个项目,其唯一的初始值是前四个属性,如上所述。具有最小,最高和平均价格的部分我将按照以下语句分组填写:
ViewBag.PriceAnalytics = _groupedItems.GroupBy(x => x.Seller).Select(gi => new GroupedItem() { MinPrice = x. }).ToList();
正如您所看到的那样,我按卖家属性进行分组,以便为销售某些商品的用户以特定价格获得所有销售。
我想要做的是首先将他们卖出的所有价格加起来,然后取出最小值和最大值。因此,如果输入值为:
Seller Mike, 21.12.2016, 1 sale, 48$
Seller Mike, 21.12.2016, 1 sale, 24$
Seller Mike, 21.12.2016, 1 sale, 29$
Seller Jenna, 21.12.2016, 1 sale, 20$
Seller Jenna, 21.12.2016, 1 sale, 39$
Seller Jenna, 21.12.2016, 1 sale, 56$
Seller Josh, 21.12.2016, 1 sale, 10$
Seller Josh, 21.12.2016, 1 sale, 28$
Seller Josh, 21.12.2016, 1 sale, 39$
所需的输出是:
Seller Mike, 21.12.2016, 3 sales, 101$
Seller Jenna, 21.12.2016, 3 sales, 115$
Seller Josh, 21.12.2016, 3 sales, 77$
在第一组之后......现在我会把所有卖家和他们的总销售额与他们的总收入相比。
现在我需要对这三个值做些什么:
101, 115, 77
最低价格为77美元,最高价格为115美元
如何使用LINQ做到这一点?
答案 0 :(得分:1)
您还可以使用LINQ查询获取汇总数据列表:
var data = (from gp in test
group gp by gp.Seller into g
select new GroupedItem
{
Seller = g.Key,
_Date = g.First()._Date,
Sales = g.Sum(x => x.Sales),
TransactionPrice = g.Sum(x => x.TransactionPrice)
}).ToList();
var best = data.Max(x => x.TransactionPrice);
var worst = data.Min(x => x.TransactionPrice);
答案 1 :(得分:0)
你几乎在那里,在对卖家进行分组后,你需要逐个处理每个小组,见:
List<GroupedItem> result = new List<GroupedItem>();
var groupedResult = _groupedItems.GroupBy(x=>x.Seller);
foreach(var grouping in groupedResult)
{
var row = grouping.First();
row.TransactionPrice = grouping.Sum(x=>x.TransactionPrice);
row.Sales = grouping.Sum(x=>x.Sales);
result.Add(row);
}