Skip to content

Instantly share code, notes, and snippets.

@lancscoder
Created March 1, 2012 20:44
Show Gist options
  • Save lancscoder/1953099 to your computer and use it in GitHub Desktop.
Save lancscoder/1953099 to your computer and use it in GitHub Desktop.
DapperDinnerRepository Part 2
private PagedList<Dinner> FindDinners(string where, object parameters, string orderBy = "DinnerID", int page = 1, int pageSize = 20)
{
using (var connection = MvcApplication.GetOpenConnection())
{
var builder = new SqlBuilder();
var start = (page - 1) * pageSize + 1;
var finish = page * pageSize;
var selectTemplate = builder.AddTemplate(pagedQuery, new { start, finish });
var countTemplate = builder.AddTemplate(totalQuery);
builder.Where(where, parameters);
builder.OrderBy(orderBy);
var results = connection.Query<Dinner>(selectTemplate.RawSql, selectTemplate.Parameters);
var count = connection.Query<int>(countTemplate.RawSql, countTemplate.Parameters).First();
return new PagedList<Dinner>(results, page, count, pageSize);
}
}
public interface IDinnerRepository
{
PagedList<Dinner> FindByLocation(float latitude, float longitude, string orderBy = "DinnerID", int page = 1, int pageSize = 20);
PagedList<Dinner> FindUpcomingDinners(string orderBy = "DinnerID", int page = 1, int pageSize = 20);
PagedList<Dinner> FindUpcomingDinners(DateTime? eventDate, string orderBy = "DinnerID", int page = 1, int pageSize = 20);
PagedList<Dinner> FindDinnersByText(string q, string orderBy = "DinnerID", int page = 1, int pageSize = 20);
IEnumerable<Dinner> AllDinnersByUser(string name);
Dinner Find(int id);
void InsertOrUpdate(Dinner dinner);
void InsertOrUpdate(RSVP rsvp);
void Delete(int id);
void DeleteRsvp(RSVP rsvp);
}
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (/**orderby**/) AS RowNumber FROM (
SELECT d.*, COUNT(r.DinnerID) AS RsvpCount
FROM Dinners d LEFT OUTER JOIN RSVP r ON d.DinnerID = r.DinnerID
/**where**/
GROUP BY d.DinnerID, d.Title, d.EventDate, d.Description, d.HostedById, d.HostedBy, d.ContactPhone, d.Address, d.Country, d.Latitude, d.Longitude
) as X
) as Y
WHERE RowNumber BETWEEN @start AND @finish"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment