public class Feature
{
public string Id { get; set; }
public string Description { get; set; }
public decimal Class { get; set; }
public decimal Price { get; set; }
}
我有一个Feature[]
数组。现在,当我有一个填充数组列表时,我想:
Price = 0
的任何项来过滤arraylist。 [Id]
和[Class]
相同,我想要总结这些商品的价格并显示为单个商品。如何使用LINQ实现这一目标?
答案 0 :(得分:7)
试试这个:
Feature[] features = ...
var results =
from f in features
where f.Price != 0
group f by new { f.Id, f.Class } into g
select new Feature
{
Id = g.Key.Id,
Class = g.Key.Class,
Description = g.First().Description,
Price = g.Sum(f => f.Price)
};
或者用流利的语法:
var results = features
.Where(f => f.Price != 0)
.GroupBy(f => new { f.Id, f.Class })
.Select(g => new Feature
{
Id = g.Key.Id,
Class = g.Key.Class,
Description = g.First().Description,
Price = g.Sum(f => f.Price)
});
请注意,这会生成一组全新的Feature
个对象,与原始对象完全无关。另请注意,此处可能不需要过滤f.Price != 0
;如果价格实际为0,则无论如何它都不会显示在总和中。唯一的区别是,如果您没有过滤掉f.Price != 0
,那么该组中所有Feature
的价格为0的组都会出现在结果集中。