#c# #wpf #linq #where-clause #dynamic-queries
#c# #wpf #linq #where-предложение #динамические запросы
Вопрос:
В настоящее время я разрабатываю проект WPF на c #. Проект принимает строку (newMemoryRFID), которая определяется при инициализации страницы, и использует ее в запросе. Вот так
var query =
from c in MemoryData.Memory
where c.RFID == newMemoryRFID
select c;
this.DataContext = query;
this.View = ((CollectionView)(CollectionViewSource.GetDefaultView(this.DataContext)));
В результате создается пустой DataContext
Однако, когда я использую тестовые данные, которые совпадают с тем, каким newMemoryRFID будет запрос, т. Е.
var query =
from c in MemoryData.Memory
where c.RFID == "0F02D76B05"
select c;
this.DataContext = query;
this.View = ((CollectionView)(CollectionViewSource.GetDefaultView(this.DataContext)));
Запрос получает правильную запись. Как вы можете догадаться, я не лучший программист, поэтому чем проще ваш ответ, тем лучше. И заранее большое спасибо
Комментарии:
1. Если это работает, когда вы жестко кодируете строку newMemoryRFID, тогда проблема должна заключаться в newMemoryRFID . Установите точку останова в своем коде перед его выполнением. Затем проверьте значение
newMemoryRFID
. Скорее всего, там могут быть какие-то пробелы или что-то в этом роде.
Ответ №1:
Настало время использовать ваш отладчик. Похоже, что newMemoryRFID не имеет значения «0F02D76B05» во время создания запроса.
Если вы не можете вмешаться в это, по крайней мере, сделайте
Debug.WriteLine(string.Format("newMemoryRFID = {0}", newMemoryRFID);
перед строкой
var query = ...
Комментарии:
1. Хотелось бы, чтобы это было так, но я проследил newMemoryRFID от начала до конца и, насколько я могу судить, это совпадает с тем, что я ожидаю, т.е. со строкой newMemoryRFID » n0F02D76B05 r»
2. Вы ожидаете, что newMemoryRFID будет включать n и r? Похоже, у вас есть дополнительные символы. Попробуйте использовать newMemoryRFID. Trim().
3. Я не ожидал их, но я пытался использовать . Trim() и это не помогло 🙁
4. Это должно записать false в трассировку отладки (или вы можете проверить это в немедленном окне или что-то еще). Отладка. WriteLine(строка. Формат («newMemoryRFID == «0F02D76B05″ равен {0}», newMemoryRFID == «0F02D76B05»); Эти дополнительные непечатаемые символы означают, что две строки не совпадают. Вам просто нужно очистить все, что вы получаете из своего источника. .Replace(«n», «»).Replace(» r», «») — это быстрый и о-о-очень простой способ. Изучите регулярные выражения или коммуникационные спецификации вашего RFID-считывателя (txt2re.com может помочь вам здесь).
Ответ №2:
Попробуйте обрезать строку как в начале, так и в конце на предмет возможных пробелов, которые не приведут к совпадению строк.