如何使用Linq进行聚合查询。我知道有一个
如果我有一个名为
我希望能够得到类似于这样的东西:
AsQueryable()
接口。但是在执行聚合操作时,似乎会抛出错误。如果我有一个名为
person
的集合,存储如下数据: {
"Name": "Punny",
"Interests": [
1,
2
]
}
另一个称为interests
的集合存储此类数据:
{
"_id":1,
"name":"music"
},
{
"_id":2,
"name":"read"
}
我希望能够得到类似于这样的东西:
{
"Name": "Punny",
"Interests": [
"music",
"read"
]
}
如何通过 Linq 和 AsQueryable
实现这一点?
我尝试了以下代码:
_context.People.AsQueryable()
.Select(p => new
{
Name = p.Name,
Interests = p.InterestingIds
.Join(_context.Interests.AsQueryable(),
per => per,
i => i.Id,
(per, i) => new {i.Name})
}).ToList();
它抛出了一个 System.NotSupportedException
System.NotSupportedException: 表达式树中不支持类型为 System.Linq.Enumerable 的 Join。{document}{InterestingIds}.Join([FunnyMongoBlog.interest], per => per, i => i.Id, (per, i) => new <>f__AnonymousType1`1(Name = i.Name))。
我自己尝试了两次访问数据库:
var person = _context.People.AsQueryable()
.Single(p => p.Name == "Punny");
var ids = person.InterestingIds;
var query = _context.Interests.AsQueryable()
.Where(i => ids.Contains(i.Id)).ToList();
var result = new
{
person.Name,
Interest = query
};
这个方法可以工作,但我想知道是否可以只进行一次检索,以便数据库能够处理聚合。
AsQueryable()
接口,我可以将Linq转换为查询。 - Hao