Skip to content

Instantly share code, notes, and snippets.

@lanceharper
Created March 5, 2012 20:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lanceharper/1980778 to your computer and use it in GitHub Desktop.
Save lanceharper/1980778 to your computer and use it in GitHub Desktop.
Using AbstractMultiMapIndexCreationTask to replace left joins in SQL
public class BabySittingTransaction : DomainBase
{
public virtual int ChildrenWatched { get; set; }
public virtual int Hours { get; set; }
public virtual string SittingProvider { get; set; }
public virtual string SittingReceiver { get; set; }
public virtual DateTimeOffset StartedAtUtc { get; set; }
}
public class SitterProviderScoreIndexTask : AbstractMultiMapIndexCreationTask<SittingProviderScore>
{
public SitterProviderScoreIndexTask()
{
AddMap<BabySittingTransaction>(
providers => from sitting in providers
select new
{
Sitter = sitting.SittingProvider,
Points = sitting.ChildrenWatched * sitting.Hours
}
);
AddMap<BabySittingTransaction>(
receivers => from sitting in receivers
select new
{
Sitter = sitting.SittingReceiver,
Points = -1 * sitting.ChildrenWatched * sitting.Hours
}
);
Reduce = results => from score in results
group score by score.Sitter
into g
select new { Sitter = g.Key, Points = g.Sum(x => x.Points) };
Sort(x => x.Points, SortOptions.Int);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment