将数学运算符存储在变量中

Store math operator in variable

我正在用 C# MVVM 创建一个应用程序。我有一个简单的问题。有没有可能将数学运算符存储在变量中?我有这样的代码:

public ICollectionView FilteredCollection
            {
                get
                {
                    return filteredCollection;
                }
                set
                {
                    filteredCollection = value;
                    OnPropertyChanged("FilteredCollection");
                }
            }



 FilteredCollection.Filter = x => (
                    (string.IsNullOrEmpty(DynamicSearchEmployeeName) || ((Employee)x).EmployeeName.Contains(DynamicSearchEmployeeName))
                    && (DynamicSearchEmployeeID == null || ((Employee)x).EmployeeID == DynamicSearchEmployeeID)
                    && (string.IsNullOrEmpty(DynamicSearchEmployeeSalary) || ((Employee)x).EmployeeSalary == Convert.ToInt32(DynamicSearchEmployeeSalary))
                    && (string.IsNullOrEmpty(DynamicSearchEmployeeDesigner) || ((Employee)x).EmployeeName.Contains(DynamicSearchEmployeeDesigner))
                    && (string.IsNullOrEmpty(DynamicSearchEmployeeEmailID) || ((Employee)x).EmployeeName.Contains(DynamicSearchEmployeeEmailID))
                    );

我想达到的目标: 第四行 (DynamicSearchEmployeeSalary) 数学运算符应取决于以下条件:

if (IsPressedEqual == true)
VARIABLE = "=="
if (IsPressedLess == true)
VARIABLE = "<"
if (IsPressedGreater == true)
VARIABLE = ">"
if (IsPressedLess == true && IsPressedEqual == true)
VARIABLE = "<="
if (IsPressedGreater == true && IsPressedEqual == true)
VARIABLE = ">="

场景:

例如,我在文本框中输入了 10000 这样的值,然后单击带有“=”运算符的按钮。因此,我想接收薪水等于 10000 的员工。 然后我点击“>”。我有薪水大于等于 10000 的员工。

 FilteredCollection.Filter = x => (
                        (string.IsNullOrEmpty(DynamicSearchEmployeeName) || ((Employee)x).EmployeeName.Contains(DynamicSearchEmployeeName))
                        && (DynamicSearchEmployeeID == null || ((Employee)x).EmployeeID == DynamicSearchEmployeeID)
                        && (string.IsNullOrEmpty(DynamicSearchEmployeeSalary) || ((Employee)x).EmployeeSalary VARIABLE Convert.ToInt32(DynamicSearchEmployeeSalary))
                        && (string.IsNullOrEmpty(DynamicSearchEmployeeDesigner) || ((Employee)x).EmployeeName.Contains(DynamicSearchEmployeeDesigner))
                        && (string.IsNullOrEmpty(DynamicSearchEmployeeEmailID) || ((Employee)x).EmployeeName.Contains(DynamicSearchEmployeeEmailID))

我制作了一个简单的基于规则的引擎...我认为它会对您的问题有所帮助...

请在这里找到它作为 nuget 包:https://www.nuget.org/packages/IbnSherien.RuleBasedEngine/

您可以创建这样的规则:

var rule = RuleEngine.CreateRule<Employee>()
                     .If<Employee>(e => e.EmployeeSalary).GreaterThan(DynamicSearchEmployeeSalary)
                     .Validate();

FilteredCollection.Filter = x => (
                    (string.IsNullOrEmpty(DynamicSearchEmployeeName) || ((Employee)x).EmployeeName.Contains(DynamicSearchEmployeeName))
                    && (DynamicSearchEmployeeID == null || ((Employee)x).EmployeeID == DynamicSearchEmployeeID)
                    && (string.IsNullOrEmpty(DynamicSearchEmployeeSalary) || rule.Match((Employee)x).IsMatch)
                    && (string.IsNullOrEmpty(DynamicSearchEmployeeDesigner) || ((Employee)x).EmployeeName.Contains(DynamicSearchEmployeeDesigner))
                    && (string.IsNullOrEmpty(DynamicSearchEmployeeEmailID) || ((Employee)x).EmployeeName.Contains(DynamicSearchEmployeeEmailID))

随时添加任何评论或为包做出贡献