Проблема с динамическим построением запросов LINQ для WMI
Таков текущий сценарий.
У меня есть форма WPF, где есть combobox, из которого можно выбрать любой из классов Win 32. Ниже этого у меня есть datagrid, где можно поместить одно из многих свойств.
Например, для Win32_Volume, можно поставить в использовать идентификатор устройства, на диск, на серийный номер и т. д. Они могут заполнить любое количество свойств, а затем приложение должно выполнить проверку запроса, если в системе существует какой-либо объект, соответствующий критерию/критериям.
Поскольку пользователю разрешено заполнять любое количество свойств, мне трудно построить запрос.
Что я уже пробовал:
Вот что я пробовал до сих пор.
Я построил словарь с именем свойства в качестве ключа и пользовательскими входами в качестве значения.
Код-за этим стоит вот что:
private ManagementObjectCollection GetObjectsOfClass(string classname) { var objectcollection = new ManagementObjectSearcher("SELECT * FROM " + classname).Get(); return objectcollection; } private ManagementObject GetObject(string classname, Dictionary<string,string> conditions) { var query = GetObjectsOfClass(classname).Cast<ManagementObject>(); foreach(var condition in conditions) { query = query.Where(test => test.Properties[condition.Key].Value.ToString().Contains(condition.Value)); } return query.FirstOrDefault(); }
GetObject принимает имя класса и словарь, содержащий имя свойства, кортежи значений. Затем он получает все экземпляры класса и затем запускает запрос LINQ на них.
Однако этот подход имеет довольно неприятный запах кода. Что я могу сделать, чтобы улучшить код?