c# - 动态构建 lambda 表达式

标签 c# lambda

因此,我开始构建一个小型测试应用程序来测试 lambda 表达式。我在这里和其他地方找到了几个例子,但我就是不明白。

谁能解释我如何使用文本框或任何其他变量构建表达式?

我的测试列表

List<People> lPeople = new List<People> 
{
    new People { Name= "Jean", LastName = "Borrow", Age= 21 } ,
    new People { Name= "Dean", LastName = "Torrow", Age= 20 }
};

工作 lambda 表达式

IEnumerable<People> result = lPeople.Where(p => p.Age < 21);
dgv_1.DataSource = result.ToList();
dgv_1.Update();

如何动态构建表达式?

类似lPeople.Where(p => p.LastName == Textbox.Text);(这当然行不通)

谢谢!

编辑:在下面的解决方案中添加了一些代码

Int32 iAge;
Boolean bSuc = Int32.TryParse(tb_filter_age.Text, out iAge);
if (!bSuc)
{
    iAge = 0;
}

最佳答案

“这当然行不通”

当你尝试时会发生什么?看起来,这就是我一直在做的事情。

根据指定运算符的 ComboBox 切换操作:

int age = int.Parse(textBoxAge.Text);

IEnumerable<People> result;
if (comboBoxOperator.Text == "=")
    result = lPeople.Where(p => p.Age == age);
else if (comboBoxOperator.Text == "<")
    result = lPeople.Where(p => p.Age < age);
else
    result = lPeople.Where(p => p.Age > age);

dgv_1.DataSource = result.ToList();
dgv_1.Update();

如果用户输入无法转换的内容,将年龄字符串转换为 int 的代码将抛出异常。查找 TryParse 以避免异常。

关于c# - 动态构建 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/904296/

相关文章:

c# - 比较验证器不会停止回发

c# - 以编程方式获取内容文件和主要输出

c# - C#中如何删除不在栈顶的栈项

c++ - 将任何 lambda 存储为 vector 中的公共(public)回调对象

lambda - 当 kotlin lambda 有效地转换为 java SAM 时?

c# - 是否可以在 EntityFramework 中将 Select(l=> new{}) 与 SelectMany 一起使用

python - 使用 Lambda 创建自定义 Keras Layer 对象

c++ - 在 winapi 中使用 lambda 函数对 vector 进行排序

c# - 使用 C# 进行 smurf 攻击

c# - Xpath“在前”检查以查找值