Есть код:
var builder = new StackExchange.Profiling.Helpers.Dapper.SqlBuilder();
var queryParams = new Dictionary<string, object>() { };
var countTmpl = builder.AddTemplate("select count(*) from Article /**where**/");
//var selectorTmpl = builder.AddTemplate("select * from Article /**where**/ /**orderby**/");
int start = filter.Params.GetStart();
int end = filter.Params.GetEnd();
var selectorTmpl = builder.AddTemplate(@"SELECT x.*
FROM ( SELECT a.*, ROW_NUMBER() OVER (/**orderby**/) AS RowNum
FROM Article a
/**where**/
) AS x
WHERE RowNum between @start and @end
ORDER BY RowNum", new { start = start, end = end });
queryParams.Add("start", start);
queryParams.Add("end", end);
if (!String.IsNullOrEmpty(filter.Alias))
{
string Alias = String.Format("%{0}%", filter.Alias);
builder.Where("Alias LIKE @Alias", new { Alias = Alias });
queryParams.Add("Alias", Alias);
}
if (filter.Category != null)
{
builder.Where("Category = @Category", new { Category = filter.Category });
queryParams.Add("Category", filter.Category);
}
if (!String.IsNullOrEmpty(filter.Content))
{
string Content = String.Format("%{0}%", filter.Content);
builder.Where("Content LIKE @Content", new { Content = Content });
queryParams.Add("Content", Content);
}
if (filter.From != null && filter.To != null)
{
builder.Where("Created >= @From", new { From = filter.From });
builder.Where("Created <= @To", new { To = filter.To });
queryParams.Add("From", filter.From);
queryParams.Add("To", filter.To);
}
if (filter.ID != null)
{
builder.Where("ID = @ID", new { ID = filter.ID });
queryParams.Add("ID", filter.ID);
}
if (!String.IsNullOrEmpty(filter.Lead))
{
string Lead = String.Format("%{0}%", filter.Lead);
builder.Where("Lead LIKE @Lead", new { Lead = Lead });
queryParams.Add("Lead", Lead);
}
if (!String.IsNullOrEmpty(filter.MetaDescription))
{
string MetaDescription = String.Format("%{0}%", filter.MetaDescription);
builder.Where("MetaDescription LIKE @MetaDescription", new { MetaDescription = MetaDescription });
queryParams.Add("MetaDescription", MetaDescription);
}
if (!String.IsNullOrEmpty(filter.MetaKeywords))
{
string MetaKeywords = String.Format("%{0}%", filter.MetaKeywords);
builder.Where("MetaKeywords LIKE @MetaKeywords", new { MetaKeywords = MetaKeywords });
queryParams.Add("MetaKeywords", MetaKeywords);
}
if (!String.IsNullOrEmpty(filter.MetaTitle))
{
string MetaTitle = String.Format("%{0}%", filter.MetaTitle);
builder.Where("MetaTitle LIKE @MetaTitle", new { MetaTitle = MetaTitle });
queryParams.Add("MetaTitle", MetaTitle);
}
if (!String.IsNullOrEmpty(filter.OgpDescription))
{
string OgpDescription = String.Format("%{0}%", filter.OgpDescription);
builder.Where("OgpDescription LIKE @OgpDescription", new { OgpDescription = OgpDescription });
queryParams.Add("OgpDescription", OgpDescription);
}
if (!String.IsNullOrEmpty(filter.OgpTitle))
{
string OgpTitle = String.Format("%{0}%", filter.OgpTitle);
builder.Where("OgpTitle LIKE @OgpTitle", new { OgpTitle = OgpTitle });
queryParams.Add("OgpTitle", OgpTitle);
}
if (!String.IsNullOrEmpty(filter.ServiceComment))
{
string ServiceComment = String.Format("%{0}%", filter.ServiceComment);
builder.Where("ServiceComment LIKE @ServiceComment", new { ServiceComment = ServiceComment });
queryParams.Add("ServiceComment", ServiceComment);
}
if (filter.State != null)
{
builder.Where("State = @State", new { State = filter.State });
queryParams.Add("State", filter.State);
}
if (filter.Title != null)
{
string Title = String.Format("%{0}%", filter.Title);
builder.Where("Title LIKE @Title", new { Title = Title });
queryParams.Add("Title", Title);
}
string OrderBy = filter.OrderBy.ToString();
switch (filter.OrderDir)
{
case OrderDirArticle.DESC:
builder.OrderBy(OrderBy + " DESC");
break;
case OrderDirArticle.ASC:
builder.OrderBy(OrderBy);
break;
}
ArticlesFDB Result = new ArticlesFDB();
using (SqlConnection db = new SqlConnectionFactory().Create(ConnectionString))
{
FDBParameters Params = filter.Params;
if (Params == null)
{
Params = new FDBParameters();
}
Params.Count = db.Query<int>(countTmpl.RawSql, queryParams).Single();
Result.Params = Params;
Result.Articles = db.Query<Article>(selectorTmpl.RawSql, queryParams);
}
return Result;
В самом конце хотел использовать как в примере(на самом деле большую часть кода взял отсюда):
https://samsaffron.com/archive/2011/09/05/Digging+...
т.е. вместо
Params.Count = db.Query<int>(countTmpl.RawSql, queryParams).Single();
Result.Params = Params;
Result.Articles = db.Query<Article>(selectorTmpl.RawSql, queryParams);
Делал так, но соответственно отсутствовало все что связано с queryParams = new Dictionary() { };
Params.Count = db.Query<int>(countTmpl.RawSql, countTmpl.Parameters).Single();
Result.Params = Params;
Result.Articles = db.Query<Article>(selectorTmpl.RawSql, selectorTmpl.Parameters );
Но так не работает, параметры не передаются. Может я где пропустил ссылку на что то?) Или так и надо параметры передавать? Или же есть вариант попроще.
Update 1:
Сейчас в коде исчезает надобность в прописывании параметров таким образом, но почему то же автор использует именно такую конструкцию!!!
builder.Where("OgpDescription LIKE @OgpDescription",
new { OgpDescription = OgpDescription });
Update 2:
Забыл про using у меня сейчас такие(помимо всех тех что относятся непосредственно к самому проекту)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Data.SqlClient;
using Dapper;
using ByndyuSoft.Infrastructure.Dapper;