RavenDb中的枚举multi-map reduce返回null而不是空列表

时间:2013-02-14 14:41:41

标签: c# mapreduce ravendb

我使用multi-map reduce来创建一个独特的字符串集合," Block"每个可枚举的" ClientName"的名称。 (我喜欢使用多地图,因为我可以确保我的所有客户在查询中都有值,即使它是空的。)

我希望我的索引的结果在该客户端的任何产品中找不到任何块时返回空列表而不是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(...)。索引工作正常,但为&#34; Blocks&#34;返回null。当没有具有特定客户端的块的产品时,在结果中而不是空列表。是否可以从索引返回空列表?列表在空的时候始终为空是否是预期的结果?

1 个答案:

答案 0 :(得分:0)

您的reduce存储了FitBlocks,但您的地图正在使用块