Делаю запрос к БД, сначала беру данные из таблицы 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(). До этих пор его можно собирать кусочками, не опасаясь, что на сервер уйдет кусок запроса.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ConsoleWrite указан в новом потоке,но вызвать нужно его в основном - как мне основной поток получить?
Начал только разбираться в Visual Studio 2017, в частности работе с Xamarin FormsУстановил на телефон Xamarin Live Player, но не могу развернуть даже пустой проект...
Доброго времени сутокИмеется некий внешний WCF сервис располагающийся по адресу: