【发布时间】:2015-11-25 14:29:34
【问题描述】:
我在使用运行 Mongo 3.0 的 2.1 C# 驱动程序的 Mongo 上遇到以下 LINQ 表达式问题。选择 Id 工作正常,但不选择 A。
以下简单测试演示了我遇到的错误。
不支持指定的方法。 在 MongoDB.Driver.Linq.Processors.AccumulatorBinder.GetAccumulatorArgument(表达式节点)
如果它不受支持,有什么建议可以解决它而不必先解开可查询的?我知道我可以使用 mongo 聚合框架,但这是不希望的,因为我们在这里没有接触到它,而且我不希望在这个级别上使用 mongo 特定语法。
[Test]
public void TestLinqSelectOnGroupBy()
{
MongoClient mongoClient = new MongoClient();
var repo = mongoClient.GetDatabase("GroupSelect");
var a = new A() { Id = "1", Group = "A" };
var col = repo.GetCollection<A>("A");
col.InsertOneAsync(a);
var allA = col.AsQueryable(); // adding .ToArray(); will obviously make it work but that is not very efficient
var works = allA.GroupBy(x => x.Group).Select(x => x.First().Id).ToArray();
var fails = allA.GroupBy(x => x.Group).Select(x => x.First()).ToArray();
}
private class A
{
public string Id { get; set; }
public string Group { get; set; }
}
【问题讨论】:
-
在遇到完全相同的问题后,我在stackoverflow.com/a/45887800/346272 回答了一个非常相似的问题——我的 groupBy(z=>z.key).select(z=>z.first()) 正在返回一个空项目数组。
标签: mongodb linq mongodb-.net-driver