组和顺序,select 来自 c# 中 ravendb 的详细信息

Group and order , select details from ravendb in c#

public class Award
{
    public int Id { get; set; }
    public string Awardor { get; set; }
    public double Amount { get; set; }
    public string Awardee { get; set; }
}

输入保存在 ravendb 中:

1 DOT 1000 YSI
2 DOJ 5000 PSI
3 DOA 6000 YSI
4 DOT 2000 PPP
5 DOT 1000 YSI
6 DOA 4000 PSI

我想要这样的输出

最高奖获得者

DOA 10000                    
DOJ 5000                     
DOT 4000

最高获奖者

PSI 9000  
YSI 8000  
PPP 2000  

如何使用 C# 创建索引并在 raven db 中查询它以按获奖者和获奖者按金额分组获取前 10 名奖项

这可行(考虑更改属性名称):

public class AwardIndex : Raven.Client.Indexes.AbstractMultiMapIndexCreationTask<AwardIndex.Result>
{
      public class Result
      {
           public string AwardeeAwardor { get; set; } //is Awardee or Awardor
           public string ItemType { get; set; } //DOT, DOJ, PSI, ecc
           public double Value { get; set; }
      }

      public AwardIndex()
      {
            AddMap<Award>(items => from item in items
                                   select new Result
                                   {
                                        AwardeeAwardor = "Awardee",
                                        ItemType = item.Awardee,
                                        Value = item.Amount
                                   });

            AddMap<Award>(items => from item in items
                                   select new Result
                                   {
                                        AwardeeAwardor = "Awardor",
                                        ItemType = item.Awardor,
                                        Value = item.Amount
                                   });

            Reduce = items => from item in items
                              group item by new { AwardeeAwardor = item.AwardeeAwardor, ItemType = item.ItemType }
                              into g
                              select new Result
                              {
                                   AwardeeAwardor = g.Key.AwardeeAwardor,
                                   ItemType = g.Key.ItemType,
                                   Value = g.Sum(x => x.Value)
                              };
       }
}

查询:

IList<AwardIndex.Result> results = session
                .Query<AwardIndex.Result, AwardIndex>()
                .OrderByDescending(x => x.Value)
                .Take(10)
                .ToList(); // do what you need

var awardor = results.Where(x => x.AwardeeAwardor == "Awardor").OrderByDescending(x => x.Value).ToList();
var awardee = results.Where(x => x.AwardeeAwardor == "Awardee").OrderByDescending(x => x.Value).ToList();

awardor.ForEach(x => Console.WriteLine(x.AwardeeAwardor + "\t" + x.ItemType + "\t" + x.Value));
Console.WriteLine("_____");
awardee.ForEach(x => Console.WriteLine(x.AwardeeAwardor + "\t" + x.ItemType + "\t" + x.Value));