Как оптимизировать код? Здравствуйте. Снова о теме быдлокодерства. Меня напрягает if в if, которые в другом if и так далее. Пожалуйста, подскажите, как оптимизировать следующий код? Раковский ли он?if (!string.IsNullOrEmpty(searchByName)) { string[] names = searchByName.Split(' '); if (names.Count() > 1) { var query = ( from i in MongoDBInstance.GetMongoDatabase.GetCollection("UserInfo").AsQueryable() where i.IsActivated == false && (( i.Name.ToUpper().Contains(names[0].ToUpper()) && i.LastName.ToUpper().Contains(names[1].ToUpper())) || (i.Name.ToUpper().Contains(names[1].ToUpper()) && i.LastName.ToUpper().Contains(names[0].ToUpper()))) orderby i.ID select i); if (query.Count() > 0) { ViewData["uncheckedProfiles"] = query.ToPagedList(pageNumber, pageSize); } else { ViewData["uncheckedProfilesSearch"] = "NoResult"; } } else { var query = ( from i in MongoDBInstance.GetMongoDatabase.GetCollection("UserInfo").AsQueryable() where i.IsActivated == false && ( i.Name.ToUpper().Contains(searchByName.ToUpper()) || i.LastName.ToUpper().Contains(searchByName.ToUpper())) orderby i.ID select i); if (query.Count() > 0) { ViewData["uncheckedProfiles"] = query.ToPagedList(pageNumber, pageSize); } else { ViewData["uncheckedProfilesSearch"] = "NoResult"; } } } else { var query = ( from i in MongoDBInstance.GetMongoDatabase.GetCollection("UserInfo").AsQueryable() where i.IsActivated == false orderby i.ID select i); if (query.Count() > 0) { ViewData["uncheckedProfiles"] = query.ToPagedList(pageNumber, pageSize); } else { ViewData["uncheckedProfiles"] = null; } }
Для оптимизации данного кода, можно использовать следующий подход:
Вынести общий код из каждого условия if-else вне условий, чтобы избежать дублирования кода.Использовать LINQ-запросы для более компактного и читаемого кода.Упростить условия внутри LINQ-запросов с использованием методов Any() и ToUpper().Сократить использование ViewState для упрощения дальнейшего кода.
Пример оптимизированного кода:
if (!string.IsNullOrEmpty(searchByName)) { string[] names = searchByName.Split(' '); var query = ( from i in MongoDBInstance.GetMongoDatabase.GetCollection<User>("UserInfo").AsQueryable<User>() where i.IsActivated == false && (names.Count() > 1 ? (names.Any(n => i.Name.ToUpper().Contains(n.ToUpper())) && names.Any(n => i.LastName.ToUpper().Contains(n.ToUpper()))) : (i.Name.ToUpper().Contains(searchByName.ToUpper()) || i.LastName.ToUpper().Contains(searchByName.ToUpper()))) orderby i.ID select i); if (query.Any()) { ViewData["uncheckedProfiles"] = query.ToPagedList(pageNumber, pageSize); } else { ViewData["uncheckedProfilesSearch"] = "NoResult"; } } else { var query = ( from i in MongoDBInstance.GetMongoDatabase.GetCollection<User>("UserInfo").AsQueryable<User>() where i.IsActivated == false orderby i.ID select i); ViewData["uncheckedProfiles"] = query.Any() ? query.ToPagedList(pageNumber, pageSize) : null; }
Этот код более читаемый, упрощен и избавлен от лишних проверок и дублирования кода.
Для оптимизации данного кода, можно использовать следующий подход:
Вынести общий код из каждого условия if-else вне условий, чтобы избежать дублирования кода.Использовать LINQ-запросы для более компактного и читаемого кода.Упростить условия внутри LINQ-запросов с использованием методов Any() и ToUpper().Сократить использование ViewState для упрощения дальнейшего кода.Пример оптимизированного кода:
if (!string.IsNullOrEmpty(searchByName)){
string[] names = searchByName.Split(' ');
var query = (
from i in MongoDBInstance.GetMongoDatabase.GetCollection<User>("UserInfo").AsQueryable<User>()
where
i.IsActivated == false &&
(names.Count() > 1 ?
(names.Any(n => i.Name.ToUpper().Contains(n.ToUpper())) &&
names.Any(n => i.LastName.ToUpper().Contains(n.ToUpper()))) :
(i.Name.ToUpper().Contains(searchByName.ToUpper()) ||
i.LastName.ToUpper().Contains(searchByName.ToUpper())))
orderby i.ID
select i);
if (query.Any())
{
ViewData["uncheckedProfiles"] = query.ToPagedList(pageNumber, pageSize);
}
else
{
ViewData["uncheckedProfilesSearch"] = "NoResult";
}
}
else
{
var query = (
from i in MongoDBInstance.GetMongoDatabase.GetCollection<User>("UserInfo").AsQueryable<User>()
where i.IsActivated == false
orderby i.ID
select i);
ViewData["uncheckedProfiles"] = query.Any() ? query.ToPagedList(pageNumber, pageSize) : null;
}
Этот код более читаемый, упрощен и избавлен от лишних проверок и дублирования кода.