簡體   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