Я не знаю, возможно ли это в XAML-только, но попробуйте следующее:
Дают Вашему ComboBox имя, таким образом, можно получить доступ к нему в codebehind: "typesComboBox1"
Теперь пробует следующий
typesComboBox1.ItemsSource = Enum.GetValues(typeof(ExampleEnum));
Ваш синтаксический анализ выражения ((Пол == Мужской И Возраст == 25) ИЛИ (Пол == Женский И Статус == Холост)) И IQ> 120 выглядит странным. Я бы проанализировал это так:
* And
* Or
* And
* ==
* Sex
* Male
* ==
* Eyes
* Blue
* And
* ==
* Sex
* Female
* ==
* Status
* Single
* >
* IQ
* 120
Тип дерева будет:
Node
{
bool evaluate ()
}
AndNode : Node
{
Node left
Node right
bool evaluate ()
{
return left.evaluate () && right.evaluate ()
}
}
// OrNode is similar
EqualsNode : Node
{
Field field
Value value
bool evaluate ()
{
return field.value () == value
}
}
// Likewise for <, >, etc
Запросы такого типа часто представляются в виде массива ИЛИ
, состоящего из предложений И
. То есть табличный формат, в котором вы читаете несколько условий И
вместе, а затем читаете их до ИЛИ
. Это приводит к некоторому повторению условий, но пользователям легко читать, писать и понимать. Ваш образец ((Пол == Мужской И Возраст == 25) ИЛИ (Пол == Женский И Статус == Холост)) И IQ> 120
будет выглядеть как
Sex == Male & Age == 25 & IQ > 120
Sex == Female & Status == Single & IQ > 120
Вы можете запросить в Google такие термины, как «исчисление предикатов» и «конъюнктивная нормальная форма».
Sounds like you need to create a user interface that allows the creation of a simple parse tree. When the presses GO you can then walk the tree and create a LINQ expression tree from that user interface structure. Execute the LINQ query and then process the results as needed. I would therefore recommend you read up on LINQ expression trees.
Я должен сказать, что именно поэтому создаются механизмы баз данных. Вы можете делать все, что вам нужно, с помощью заданной логики, и вы можете даже прийти к желаемому результату, но это стандартные проблемы, решаемые базами данных и SQL. Вы также можете найти в linq решение в коде.