0
我正在使用multi-map reduce为每个可枚举的“ClientName”创建一个唯一的字符串集合“Block”名称。 (我喜欢使用多地图,因为我可以确保我的所有客户端都具有查询中的值,即使它是空的)。RavenDb中的枚举multi-map reduce返回null而不是空列表
我希望我的索引的结果返回一个空列表而不是null,当在该客户端的任何产品中找不到块时。这是我的索引。
public class Client_Blocks
: AbstractMultiMapIndexCreationTask<Client_Blocks.Result>
{
public class Result
{
public Client.Names ClientName { get; set; }
public IEnumerable<string> Blocks { get; set; }
}
public Client_Blocks()
{
AddMap<Product>(products =>
from product in products
where product.Details != null
where product.Details.Block != null
select new
{
ClientName = product.ClientName,
Blocks = new List<string>{product.Details.Block}
});
AddMap<Client>(clients =>
from client in clients
select new
{
ClientName = client.Name,
Blocks = new List<string>()
});
Reduce = results => from result in results
group result by result.ClientName
into g
select new
{
ClientName = g.Key,
Blocks = g.Any() ?
g.SelectMany(x => x.Blocks).Distinct() :
new List<string>()
};
}
}
我也用g != null
代替g.Any()
,只有具有g.SelectMany(...)
尝试。索引工作正常,但是当没有产品包含特定客户端的块时,结果中的“块”将返回null,而不是空列表。是否有可能从索引返回空列表?列表在空时始终为空是否是预期的后果?
糟糕,发布到StackOverflow时发生翻译错误。我也澄清了这个问题。该索引的工作原理,我只是尝试一种方式来返回一个空列表,而不是在缩减列表中没有元素时为空。 – craastad 2013-02-15 07:57:00