Sabyasachi Mukherjee Ответов: 0

Проблема с динамическим построением запросов 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 на них.

Однако этот подход имеет довольно неприятный запах кода. Что я могу сделать, чтобы улучшить код?

0 Ответов