0

我想知道如何对避免匿名类型的数据进行分组,因为键可能是一、二……根据客户的选择。

例子:

我们有一堂课

public class Customer
{
    public string Name { get; set; }

    public int Age { get; set; }

    public string Location { get; set; }

    public char Genre { get; set; }
}

通过选中的列表框,您可以选择参数来分组数据,其中选项为:

  • 姓名
  • 年龄
  • 地点
  • 类型

所以我们可能有 1 到 4 个键来对数据进行分组。

我想避免使用 switch case 或多个 if 语句来获取正确的 IGrouping 数据。

我想避免:

 public IGrouping<object,Customer> GetGroups(IEnumerable<Customer> data)
 {
    if("Name is selected")
    {
        return data.GroupBy(e => e.Name);
    }
    if("Name and Age are selected")
    {
        return data.GroupBy(e => new { e.Name, e.Age });
    }
}
4

2 回答 2

2

不确定这是否是您正在寻找的东西,但可能会有所帮助:

return data.GroupBy(g =>
  new {
    Name = includeName ? g.Name : null,
    Age = includeAge ? g.Age : null,
    ... 
  });
于 2021-07-16T13:38:34.970 回答
1

这个可行,有点作弊,您只需确保分组键具有您希望分组成为的正确值。下面的工作,因为如果您不想按给定属性分组,您只需设置一个默认值(每个项目都相同)值。

    bool groupByName = false;
    bool groupByAge = false;
    bool groupByLocation = false;
    bool groupByGenre = true;
    
    var result = from x in items
                 group x by new { 
                                    Name = (!groupByName ? "" : x.Name), 
                                    Age = (!groupByAge ? 0 : x.Age),
                                    Location = (!groupByLocation ? "" : x.Location),
                                    Genre = (!groupByGenre ? ' ' : x.Genre)
                                } 
                                    into g
                 select g;
于 2021-07-16T13:38:22.250 回答