2014-01-08 54 views
1
public class Feature 
{ 
    public string Id { get; set; } 
    public string Description { get; set; } 
    public decimal Class { get; set; } 
    public decimal Price { get; set; } 
} 

我有一个Feature[]数组。现在,当我有一个填充阵列列表时,我想要:阵列上的LINQ过滤器

  1. 通过删除Price = 0中的任何项来过滤arraylist。
  2. 如果[Id][Class]是相同的,我想总结这些物品的价格并显示为单个物品。

如何用LINQ实现这一点?

回答

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的组将位于结果集中。