阵列上的LINQ过滤器

Jar*_*Bot 1 .net c# linq c#-4.0

public class Feature
{
    public string Id { get;  set; }
    public string Description { get;  set; }
    public decimal Class { get;  set; }
    public decimal Price { get;  set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个Feature[]阵列.现在,当我有一个填充数组列表时,我想:

  1. 通过删除任何项来过滤arraylist Price = 0.
  2. 如果[Id][Class]我一样,我想总结这些项目的价格并显示为单个项目.

如何用LINQ实现这一目标?

p.s*_*w.g 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)
    };
Run Code Online (Sandbox Code Playgroud)

或者用流利的语法:

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)
        });
Run Code Online (Sandbox Code Playgroud)

请注意,这会生成一组全新的Feature对象,与原始对象完全无关.另请注意,f.Price != 0此处可能不需要过滤; 如果价格实际为0,则无论如何它都不会显示在总和中.唯一的区别是,如果您没有过滤掉f.Price != 0,那么Feature该组中所有价格为0的组将在结果集中.