因此,我开始构建一个小型测试应用程序来测试 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/