C# 在变量中存储数学运算符
我正在用C#MVVM创建一个应用程序。我有一个简单的问题。是否有可能将数学运算符存储在变量中?我有这样一个代码:C# 在变量中存储数学运算符,c#,linq,mvvm,collectionview,C#,Linq,Mvvm,Collectionview,我正在用C#MVVM创建一个应用程序。我有一个简单的问题。是否有可能将数学运算符存储在变量中?我有这样一个代码: public ICollectionView FilteredCollection { get { return filteredCollection; } set
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 = ">="
我已经做了一个简单的基于规则的引擎。。。我想这会对你的问题有所帮助 请在此处以nuget软件包的形式查找: 您可以创建如下规则:
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))
var rule=RuleEngine.CreateRule()
.If(e=>e.EmployeeSalary).大于(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))
请随意添加任何注释或对包作出贡献您打算如何在查询中使用它?什么是
FilteredCollection
?您能否显示在理想情况下运算符的使用位置?您不能单独存储运算符,但:您可以组合查询-用于LINQ和to对象(IEnumerable
)和LINQ to-(随便什么)(IQueryable
)-您可以非常灵活地构建表达式树(通过使用典型编译器解释结构的替代构造语法).那么:您将如何使用它?这对任何答案都会产生巨大影响。我认为您不会自行存储变量,但您确实可以存储…第二个Patrick提出的问题…这些查询将在何处运行?本地作为LINQ2对象,还是将它们转换为Linq2EF/Linq2Sql?我编辑了我的问题。
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))