[英]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.