动态LINQ:GroupBy for MongoDB可查询集合

时间:2015-12-07 22:47:18

标签: c# mongodb linq dynamic-linq

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

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

{
     "_id" : "151207.01.02", 
     "project" : "SomeRandomProject", 
     "material" : "Azbantium", 
     "process" : "Paintball",
}

我已成功使用此代码使用以下代码构建 sort 查询(其中 MyType 是用于MongoDB的POCO类):

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
}

当我在输入“材料”作为参数进行调试时查看orderedList变量时,这会产生与此等效的聚合:

{aggregate([{ "$sort" : { "material" : 1 } }, { "$project" : { "material" : "$material", "_id" : 0 } }])}

我能够获得每次运行的“材料”清单。

但是,当我使用以下代码尝试查询时(使用此帖子中的建议:How to use GroupBy using Dynamic LINQ):

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
}

我在collectiveList变量中看到一个空括号和一些通用形式的查询:

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

我得到以下例外:

  

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

中      

其他信息:不支持方法GroupBy   表达式树:aggregate([])。GroupBy(Param_0 =&gt; Param_0.material,   Param_1 =&gt; PARAM_1)。

我知道.NET驱动程序相对较新。我确实需要能够进行包括分组操作的动态查询。任何人都可以建议吗?

非常感谢!

- Ari

0 个答案:

没有答案