MongoDb C#驱动程序2.4 - 不支持动态GroupBy的LINQ

时间:2017-07-28 13:18:03

标签: c# mongodb linq

var result = await Events.AsQueryable()
            .Where(_ => _.Date >= from.Date && _.Date <= to.Date)
            .GroupBy(_ => _.SomeProp)
            .Select(n => new { n.Key, Count = n.Count() })
            .ToListAsync();

就像魅力一样。但是,我想说我想通过自定义字段聚合 - 在aggregateBy字符串参数中收到。 所以我试试:

var propertyToGroupBy = typeof(DiagnosticEvent).GetProperties()
                        .First(x => x.Name.ToLowerInvariant() == aggregateBy);

然后:

var result = await Events.AsQueryable()
            .Where(_ => _.Date >= from.Date && _.Date <= to.Date)
            .GroupBy(p => propertyToGroupBy.GetValue(p))
            .Select(n => new { n.Key, Count = n.Count() })
            .ToListAsync();

最终:

  

不支持System.Reflection.PropertyInfo类型的GetValue   表达式树System.String Type.GetValue({document})

在坚持使用LINQ的时候知道如何做到这一点? 我知道我可以使用Fluent API:

var group = new BsonDocument { { "_id", $"${aggregateBy}"}, { "Count", new BsonDocument("$sum", 1) } };

但我希望与LINQ方法保持一致。

完整堆栈跟踪:https://pastebin.com/RNzXi1kj

0 个答案:

没有答案