[英]Create a dynamic group by Query in Linq
I have a form with 4 checkbox for grouping , when I want to create LINQ dynamic query in where clause, it is very easy to use something like this : 我有一个带有4复选框的表格用于分组,当我想在where子句中创建LINQ动态查询时,使用这样的东西非常容易:
query = query.where(x=>x.blah == blahblah).asQueryable();
but I can't simulate this type of coding for Group by clause. 但是我无法为Group by子句模拟这种类型的编码。 I need something like this :
我需要这样的东西:
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);
....
How can I do this kind of query? 我该如何查询? some post in stackoverflow show misunderstanding code like Expression> .
stackoverflow中的某些帖子显示了误解代码,例如Expression>。 Please show me an easy and applicable way.
请给我展示一种简单且适用的方法。
May be this is not the correct way of doing things, but using reflection does thing. 可能这不是正确的做事方式,但是使用反射可以做事。 Hence, all you need is to determine property name and pass it to
GroupBy
. 因此,您所需
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.