C# MongoDB可查询集合的动态LINQ:GroupBy

C# MongoDB可查询集合的动态LINQ:GroupBy,c#,mongodb,linq,dynamic-linq,C#,Mongodb,Linq,Dynamic Linq,我正在尝试使用LINQ进行MongoDB聚合,使用MongoDB.NET驱动程序版本2.1和.NET 4.5,使用ScottGu的动态LINQ库 这是存储在MongoDB中的数据的简化模式: { "_id" : "151207.01.02", "project" : "SomeRandomProject", "material" : "Azbantium", "process" : "Paintball", } 我已经成功地使用它构建了一个带有以下

我正在尝试使用LINQ进行MongoDB聚合,使用MongoDB.NET驱动程序版本2.1和.NET 4.5,使用ScottGu的动态LINQ库

这是存储在MongoDB中的数据的简化模式:

{
     "_id" : "151207.01.02", 
     "project" : "SomeRandomProject", 
     "material" : "Azbantium", 
     "process" : "Paintball",
}
我已经成功地使用它构建了一个带有以下代码的sort查询(其中MyType是一个用于MongoDB的POCO类):

我可以得到每次跑步的“材料”列表

但是,当我尝试使用以下代码进行查询时(使用本文的建议:):

我得到了以下例外:

发生类型为“System.NotSupportedException”的未处理异常 在MongoDB.Driver.dll中

其他信息:中不支持GroupBy方法 表达式树:聚合([])。GroupBy(参数0=>参数0.material, 参数1=>参数1)

我知道.NET驱动程序相对较新。我确实需要能够执行包含分组操作的动态查询。有人能给我建议吗

谢谢你


--Ari

我想你有麻烦了,除非你将group by translation实现为mongo Queries,你知道怎么做吗?我知道这篇文章,但它是葡萄牙语的:
public static List<string> DynamicOrderAggregate(string parameter)
{
    var client = new MongoClient(connectionString); // a static value not shown
    var db = client.GetDatabase(database); // also a static value not shown
    var col = db.GetCollection<MyType>(collection);

    List<string> orderListString = new List<string>();

    IQueryable<MyType> colQueryable = col.AsQueryable();

    var orderedList = colQueryable
            .OrderBy(parameter)
            .Select(parameter);

    foreach(var item in orderedList)
        orderListString.Add(item)

    return orderListString
}
{aggregate([{ "$sort" : { "material" : 1 } }, { "$project" : { "material" : "$material", "_id" : 0 } }])}
public static List<string> DynamicOrderAggregate(string parameter)
{
    var client = new MongoClient(connectionString);
    var db = client.GetDatabase(database);
    var col = db.GetCollection<MyType>(collection);

    List<string> groupListString = new List<string>();

    IQueryable<MyType> colQueryable = col.AsQueryable();

    var groupedList = colQueryable
        .GroupBy(parameter, "it")
        .Select(String.Format("new (it.Key as {0})", parameter));

    foreach(var item in orderedList) // exception occurs here
        groupListString.Add(item)

    return groupListString
}
{aggregate([]).GroupBy(Param_0 => Param_0.material, Param_1 => Param_1).Select(Param_2 => new DynamicClass1() {material = Param_2.Key})}