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));