1

次の ItemNumber を取得するために、以下のインデックスを作成しました。ItemNumber はレイヴン識別子ではないため、アプリケーションによって割り当てられます。データベースに項目がない場合、インデックスは 0 を返します。それ以外の場合は、Max + 1 を返す必要があります。ほとんど機能しますが、1 つの明らかな問題があります。max + 1 を返す代わりに、max + 2 を返します。その最終結果は、ItemNumbers が 1 つおきの数値をスキップすることです。「+ 1」を削除すると、想定どおりに動作し、既存の最大値を返しますが、それは私が必要とするものではありません。私が間違っていることはありますか?

public class NextItemNumber : AbstractIndexCreationTask<Item, NextItemNumber.Result>
{
    public class Result
    {
        public long ItemNumber { get; set; }
    }

    public NextItemNumber()
    {
        Map = items => from item in items
                          select new
                          {
                              // item.ItemNumber is a string
                              ItemNumber = Convert.ToInt64(item.ItemNumber)
                          };

        Reduce = results => from result in results
                            group result by 0 into g
                            select new
                            {
                                ItemNumber = g.Max(x => x.ItemNumber) + 1
                            };
    }
}
4

1 に答える 1

1

reduce では、次のようなものが必要です。

                            ItemNumber = g.Max(x=>x.ItemNumber )
于 2013-06-06T08:28:46.110 に答える