我尝试使用动态查询创建嵌套组。
以下是我的数据集
var invoices = new List < Purchase > () {
new Purchase() {
Id = 1, Customer = "a", Date = DateTime.Parse("1/1/2009")
}, new Purchase() {
Id = 2, Customer = "a", Date = DateTime.Parse("1/2/2009")
}, new Purchase() {
Id = 3, Customer = "a", Date = DateTime.Parse("1/2/2009")
}, new Purchase() {
Id = 4, Customer = "b", Date = DateTime.Parse("1/1/2009")
}, new Purchase() {
Id = 5, Customer = "b", Date = DateTime.Parse("1/1/2009")
}, new Purchase() {
Id = 6, Customer = "b", Date = DateTime.Parse("1/2/2009")
}
};
此linq查询返回所需的结果。
var tree = invoices.GroupBy(x => x.Date).Select(x => new
{
Key = x.Key,
Items = x.GroupBy(y => y.Customer).Select(y => new
{
Key = y.Key,
Items = y
})
}).ToList();
以下是上述linq查询的输出
但我只需要按不同的顺序对不同的列进行分组。
因此我尝试创建动态linq查询。但我的代码阻止结果与我以前的linq查询不一样。
var groupedInvoiceItems = invoices.AsQueryable().GroupBy("new (Date, Customer)", "it");
答案 0 :(得分:0)
您可以使用Generics执行此操作。只需将您的Lambda传递给通用方法即可。
类似的东西:
private IEnumerable<PurchaseGrp> BuildList<TSource>(IQueryable<TSource> allRecords,
Func<TSource, string> selector)
{
var result = allRecords.GroupBy(x = > x.selector(x));
return result;
}
返回类型可以是新的分组类型PurchaseGrp
,也可以与您的来源(Purchase
)相同。