Делаю запрос к БД, сначала беру данные из таблицы Technologies, далее идет поиск, сортировка + разбиваю на страницы. Получается очень много похожего кода.
switch (sort) {
case "Low":
items.Tvsets = db.Technologies.Where(x => x.Name.Contains(tech))
.Include(p => p.Tvsets.Select(x => x.Company))
.FirstOrDefault() ? .Tvsets
.Where(x => x.Name.Contains(search) ||
x.Company.Name.Contains(search) ||
x.Technology.Name.Contains(search))
.OrderBy(x => x.Price)
.Skip((pageInfo.PageNumber - 1) * pageInfo.PageSize)
.Take(GetAll(pageInfo.TotalItems, pageInfo.PageSize, pageInfo.PageNumber))
.ToList();
return View(items);
default:
ViewBag.Sort = "High";
items.Tvsets = db.Technologies.Where(x => x.Name.Contains(tech))
.Include(p => p.Tvsets.Select(x => x.Company))
.FirstOrDefault() ? .Tvsets
.Where(x => x.Name.Contains(search) ||
x.Company.Name.Contains(search) ||
x.Technology.Name.Contains(search))
.OrderByDescending(x => x.Price)
.Skip((pageInfo.PageNumber - 1) * pageInfo.PageSize)
.Take(GetAll(pageInfo.TotalItems, pageInfo.PageSize, pageInfo.PageNumber))
.ToList();
return View(items);
}
Как можно уменьшить код? Может быть есть какие-либо паттерны или другие способы?
попробуйте так:
var tvSets = db.Technologies
.Where(x => x.Name.Contains(tech))
.Include(p => p.Tvsets.Select(x => x.Company))
.FirstOrDefault() ? .Tvsets
.Where(x => x.Name.Contains(search) ||
x.Company.Name.Contains(search) ||
x.Technology.Name.Contains(search)).AsQueryable();
if (sort == "Low")
{
tvSets = tvSets.OrderBy(x => x.Price);
}
else
{
ViewBag.Sort = "High";
tvSets = tvSets.OrderByDescending(x => x.Price);
}
items.Tvsets = tvSets.Skip((pageInfo.PageNumber - 1) * pageInfo.PageSize)
.Take(GetAll(pageInfo.TotalItems, pageInfo.PageSize, pageInfo.PageNumber))
.ToList();
return View(items);
Т.е. выделяем общее в обоих запросах, а различие в зависимости от параметра. В данном случае у вас всего одно различие, в сортировке. Вот ее и выделили. Запрос не выполнится до тех пор, пока не будет вызван .ToList(). До этих пор его можно собирать кусочками, не опасаясь, что на сервер уйдет кусок запроса.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости