Есть у меня форма на стороне клиента с двумя выпадющими меню, он там выбирает год и тип обложки.
В контроллере я собираю эти данные.И из исходя из этого делаю запрос в таблицу.Логично, если ничего не выбрано, то я данные подгружаю все.
string sql_count = string.Format("SELECT count(*) FROM labirint");
string sql_pages = string.Format(" ORDER BY id ASC LIMIT "+ skip +", 10");
string sql_all = string.Format("SELECT * FROM labirint");
string sql_result = string.Format(sql_all + sql_pages);
var v = dc.Database.SqlQuery<labirint>(sql_result).AsQueryable();
recordsTotal = dc.Database.SqlQuery<int>(sql_count).First();
var data = v.ToList();
dc.Dispose();
return Json(new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data },
JsonRequestBehavior.AllowGet);
Вот так это выглядит, когда таблица загружается по умолчанию.Теперь когда выбирают год. Я делаю склейку строки.
if (!string.IsNullOrEmpty(year))
{
int year_int = int.Parse(year);
string sql_year = string.Format(" WHERE year = " + year_int + "");
sql_result = string.Format(sql_all + sql_year + sql_pages);
sql_count = string.Format(sql_count + sql_year);
}
В итоге получается вот так
string sql_count = string.Format("SELECT count(*) FROM labirint");
string sql_pages = string.Format(" ORDER BY id ASC LIMIT "+ skip +", 10");
string sql_all = string.Format("SELECT * FROM labirint");
string sql_result = string.Format(sql_all + sql_pages);
if (!string.IsNullOrEmpty(year))
{
int year_int = int.Parse(year);
string sql_year = string.Format(" WHERE year = " + year_int + "");
sql_result = string.Format(sql_all + sql_year + sql_pages);
sql_count = string.Format(sql_count + sql_year);
}
var v = dc.Database.SqlQuery<labirint>(sql_result).AsQueryable();
recordsTotal = dc.Database.SqlQuery<int>(sql_count).First();
var data = v.ToList();
dc.Dispose();
return Json(new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data },
JsonRequestBehavior.AllowGet);
Все прекрасно работает. Но скорее всего написал я это все криво и не красиво . Проблемы начинаются, когда я хочу отсортировать по обложке. Выбрал я к примеру год 2013 и хочу выбрать все книги с твердой обложкой или на оборот. Как мне это сделать? Возможно будет и третье поле с дропбоксом.
var where = new List<string>();
var query_params = new List<SqlParameter>();
var limit_sql = "LIMIT @skip, 10";
query_params.Add(new SqlParameter("@skip", int.Parse(skip)));
if (!string.IsNullOrEmpty(year))
{
where.Add("year = @year");
query_params.Add(new SqlParameter("@year", int.Parse(year)));
}
if(условие)
{
where.Add(...);
query_params.Add(...);
}
var whereSql = where.Any() ? " WHERE " + string.Join(" AND ", where) : "";
var sql_result = select_sql + where_sql + order_sql + limit_sql;
var data = dc.Database.SqlQuery<labirint>(sql_result, query_params.ToArray()).ToList();
После WHERE year = " + year_int + ""
должно быть AND oblojka = 'tverdaya'
. Но лучше все же не писать SQL-запросы самому, используйте ORM или, если это слишком медленно для вас, хотя бы DbExtensions или что-то легковесное типа Dapper
C# WinFormThread запускается и работает, но блокирует все элементы формы
На данный вопрос уже ответили:
Есть txt - файл вида: [Володя_Синяк #1 Охранник 5 лет], в котором #1 это номер отделаЗадача заключается в том, чтобы при вводе нужного отдела сортировало...