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