Предпосылка: Я новичок в c # и StackOverflow.
У меня есть список, в котором пользователь может искать, имеет фильтры и сортировку.
Я запрашиваю исходную коллекцию и передаю ее в коллекцию, связанную с представлением.
Пока пользователь ищет (асинхронно), я запрашиваю и полностью заменяю коллекцию.Когда пользователь фильтрует / сортирует запрос, сравнивает и добавляет / удаляет его из отображаемой коллекции.
Вопрос:
Можно ли сделать эти запросы менее подробными, используядругая техника?Этот фрагмент кода содержит код только для одного случая фильтра ... Он очень быстро и очень быстро повторяет части запросов.
У меня недостаточно опыта, чтобы понять, является ли следующий код наиболее эффективным подходом, но это работает.
...
else if ( Filter == "show all" )
{
if ( Sort == "Quantity" )
{
if (SearchTxt.Length > 1) // searchbox is not empty
{
if (SearchTxt== _oldSearchTxt )
{
// User has typed in search, perform normal query
// by filter, sort and searchtxt
}
else
{
// User is typing in search, perform async query
// by filter, sort and searchtxt
}
}
else // searchbox is empty
{
// perform normal query
// by filter, sort
}
}
else if ( Sort == "Rating" )
{
if (SearchTxt.Length > 1) // searchbox is not empty
{
if (SearchTxt== _oldSearchTxt )
{
// User has typed in search, perform normal query
// by filter, sort and searchtxt
}
else
{
// User is typing in search, perform async query
// by filter, sort and searchtxt
}
}
else // searchbox is empty
{
// perform normal query
// by filter, sort
}
}
else // Sort == "Name"
{
if (SearchTxt.Length > 1) // searchbox is not empty
{
if (SearchTxt== _oldSearchTxt )
{
// User has typed in search, perform normal query
// by filter, sort and searchtxt
}
else
{
// User is typing in search, perform async query
// by filter, sort and searchtxt
}
}
else // searchbox is empty
{
// perform normal query
// by filter, sort
}
}
}
_oldSearchTxt = SearchTxt;
Я пытался поместить части запросов в выражение, но выдает ошибку:
Expression<Func<MyClassObject, bool>> ItIsFlagged = x => x.IsFlagged.Equals(true);
// the query
InventoryVM.ReplaceWith( new GroupedObservableCollection<string, MyClassObject>( s => s.Brand,
Inventory.Where( ItIsFlagged )
.Where(x => x.Name.ToUpper().Contains(Searchtxt))
, Comparer
);
throws
"Error CS1503 Argument 2: cannot convert from'System.Linq.Expressions.Expression<System.Func<MyApp.Models.MyObjectClass, bool>>' to 'System.Func<MyApp.Models.MyObjectClass, bool>"
Примеры, которые я нашел, показывают, что это должно работать так, как я это реализовал.То, что я понимаю из ошибки, является несоответствием объекта.Я пробовал кастинг, но безрезультатно.