Делаю запрос к БД, сначала беру данные из таблицы 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(). До этих пор его можно собирать кусочками, не опасаясь, что на сервер уйдет кусок запроса.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей