我目前有一个客户和一个产品系列...... 客户包含订阅列表,订阅包含ProductId。 我试图创建一个索引,允许我只选择订阅中未使用的产品ID,以便我可以删除它们。
到目前为止,我只管理创建索引来检索订阅中使用的productIds。 我已经研究过多个地图缩减示例甚至一些变换,但似乎没有任何意义。
有什么想法吗?
谢谢!
答案 0 :(得分:2)
好的......所以它最终打击了我。 这就是我做的: 我构建了2个映射,一个用于Products集合,另一个用于Customers集合,我选择了产品ID并创建了一个名为Usage的附加属性。产品集合中的产品的使用率设置为0,客户 - >订阅中的产品的使用率设置为1。 在reduce中,我按使用总和进行过滤,以获得仅未使用的产品(sum = 0)。 见下面的代码:
图:
from prod in docs.Products
select new
{ProductId = prod.ExternalId,
Usage = 0
}
from customer in docs.Customers
from docSubscriptionsItem in ((IEnumerable<dynamic>)customer.Subscriptions).DefaultIfEmpty()
select new { ProductId = docSubscriptionsItem.ProductId,
Usage=1}
减少
from result in results
group result by result.ProductId
into g
let sum = g.Sum(p=>p.Usage)
where sum == 0
select new
{ProductId=g.Key, Usage = sum}
希望这有助于某人!