Пользовательский класс в комбинированном окне C #, динамическое приведение строки к Linq - PullRequest
0 голосов
/ 01 марта 2019

Я написал универсальный класс, который хранится в списке элементов комбинированного списка, используя ключ / значение для идентификатора базы данных и его значения метки строки.Таким образом, выбирая индекс, я получаю его первичный ключ БД и метку строки для визуальных целей.Проблема в том, что я перезаписываю поле со списком, чтобы выполнить расширенный поиск «Предложить / добавить», используя подстроки, а не просто искать «StartsWith», как это делает поле со списком по умолчанию в C # / .NET.

Проблема заключается в использованииlinq (подкласс компонента ComboBox):

private Expression<Func<ObjectCollection, IEnumerable<string>>> _propertySelector

_suggBindingList.Clear();
_suggBindingList.RaiseListChangedEvents = false;
_propertySelectorCompiled(Items) //Items is ObjectCollection <-- crashes
    .Where(_filterRuleCompiled)
    .OrderBy(_suggestListOrderRuleCompiled)
    .ToList()
    .ForEach(_suggBindingList.Add);
_suggBindingList.RaiseListChangedEvents = true;
_suggBindingList.ResetBindings();

Простое решение состоит в том, чтобы просто вместо этого вручную циклически проходить по элементам и вручную приводить / преобразовывать, но я надеялся, что был более простой способ разрешить мой комбинированный список DataItemпользовательский класс, который должен быть приведен к строке во время выполнения ... поэтому приведенный выше код будет нормально работать с обычными данными поля со списком или с парой ключ / значение настраиваемого элемента поля со списком, который я добавил. ToString () класса просто используетметка для представления себя в виде строки, которая, как я предполагал, будет охватывать это, но я не думаю.

Есть предложения?

1 Ответ

0 голосов
/ 10 марта 2019

К сожалению, не было простого общего способа, которым я мог бы найти w / linq, поэтому вместо этого я просто написал код, чтобы полагаться на .ToString () соответственно, чтобы объекты (даже мои пользовательские) были представлены в строковом формате и работалина соответственно.Поэтому я сделал общий способ, просто удалил linq, потому что он зависал в моих пользовательских классах и не вызывал переопределение ToString (), просто приводил время приведения и завершался неудачей.

Да, все еще чистоуниверсальное решение, но использование linq было хорошо.К сожалению, linq теперь не существует в решении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...