C# 和将获奖者和获奖者的值相加,并需要按每个值选择排名靠前的获奖者和获奖者year@BaskerGanesan如果有效,请接受答案,无论如何,我不认为您可以在15天后用不同的细节来扩展您的问题。@BaskerGanesan无论如何,在映射中添加年份,然后在re

C# 和将获奖者和获奖者的值相加,并需要按每个值选择排名靠前的获奖者和获奖者year@BaskerGanesan如果有效,请接受答案,无论如何,我不认为您可以在15天后用不同的细节来扩展您的问题。@BaskerGanesan无论如何,在映射中添加年份,然后在re,c#,ravendb,C#,Ravendb,和将获奖者和获奖者的值相加,并需要按每个值选择排名靠前的获奖者和获奖者year@BaskerGanesan如果有效,请接受答案,无论如何,我不认为您可以在15天后用不同的细节来扩展您的问题。@BaskerGanesan无论如何,在映射中添加年份,然后在reduce中的group by中添加年份 public class Award { public int Id { get; set; } public string Awardor { get; set; } publi


和将获奖者和获奖者的值相加,并需要按每个值选择排名靠前的获奖者和获奖者year@BaskerGanesan如果有效,请接受答案,无论如何,我不认为您可以在15天后用不同的细节来扩展您的问题。@BaskerGanesan无论如何,在映射中添加年份,然后在reduce中的group by中添加年份
public class Award
{
    public int Id { get; set; }
    public string Awardor { get; set; }
    public double Amount { get; set; }
    public string Awardee { get; set; }
}
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  
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));