繁体   English   中英

在Linq中通过查询创建动态组

[英]Create a dynamic group by Query in Linq

我有一个带有4复选框的表格用于分组,当我想在where子句中创建LINQ动态查询时,使用这样的东西非常容易:

  query = query.where(x=>x.blah == blahblah).asQueryable();

但是我无法为Group by子句模拟这种类型的编码。 我需要这样的东西:

if(blah1==true)
    query = query.GroupBy(x=>x.Blah1).select(smthing);
if(blah2==true)
    query = query.GroupBy(x=>x.Blah2).select(smthing);
if(blah3==true)
    query = query.GroupBy(x=>x.Blah3).select(smthing);
 ....

我该如何查询? stackoverflow中的某些帖子显示了误解代码,例如Expression>。 请给展示一种简单且适用的方法。

可能这不是正确的做事方式,但是使用反射可以做事。 因此,您所需GroupBy就是确定属性名称并将其传递给GroupBy

class Person
{
    public string Name { get; set; }
    public int Wage { get; set; }
    public int Age { get; set; }
    public override string ToString() =>
        $"Name: {Name}, Wage: {Wage}, Age: {Age}";
}

var list = new List<Person>
{
    new Person { Name = "Name1", Wage = 1, Age = 1},
    new Person { Name = "Name1", Wage = 2, Age = 2},
    new Person { Name = "Name2", Wage = 2, Age = 2},
    new Person { Name = "Name3", Wage = 2, Age = 2},
    new Person { Name = "Name3", Wage = 2, Age = 2},
    new Person { Name = "Name4", Wage = 2, Age = 2},
    new Person { Name = "Name4", Wage = 2, Age = 2}
};

var x = list.GroupBy(p => p.GetType().GetProperty("Name").GetValue(p));

foreach(var z in x)
{
    WriteLine(z.Key);
    foreach(var p in z)
    {
        WriteLine("\t" + p);
    }
}

/*
    Output:

Name1
      Name: Name1, Wage: 1, Age: 1
      Name: Name1, Wage: 2, Age: 2
Name2
      Name: Name2, Wage: 2, Age: 2
Name3
      Name: Name3, Wage: 2, Age: 2
      Name: Name3, Wage: 2, Age: 2
Name4
      Name: Name4, Wage: 2, Age: 2
      Name: Name4, Wage: 2, Age: 2
*/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM