【发布时间】:2016-06-24 05:45:52
【问题描述】:
如何使用 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 : 表达式树 {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
};
这是可行的,但我想知道我们是否可以一次性完成,以便数据库可以处理聚合。
【问题讨论】: