代码之家  ›  专栏  ›  技术社区  ›  Zote

创建具有不同类型的表达式

  •  1
  • Zote  · 技术社区  · 14 年前

    如何将if(propType.PropertyType==typeof(string))和if(propType.PropertyType==typeof(int))更改为更动态的类型?

    private void button2_Click(object sender, EventArgs e)
            {
                var lista = _pessoas.AsQueryable();
    
                if (textBox2.Text != "")
                {
                    var param = Expression.Parameter(typeof(Pessoa), "x");
    
                    var propriedade = Expression.Property(param, textBox2.Text);
    
                    var propType = typeof(Pessoa).GetProperties().FirstOrDefault(x => x.Name == textBox2.Text);
    
                    if (propType.PropertyType == typeof(string))
                    {
                        lista = lista.Where(Expression.Lambda<Func<Pessoa, bool>>(
                            Expression.Equal(
                                propriedade,
                                Expression.Constant(textBox3.Text)
                                ), param));
                    }
                    else
                    {
                        if (propType.PropertyType == typeof(int))
                        {
                            lista = lista.Where(Expression.Lambda<Func<Pessoa, bool>>(
                                    Expression.Equal(
                                        propriedade,
                                        Expression.Constant(int.Parse(textBox3.Text))
                                        ), param));
                        }
                        else
                        {
                            throw new NotImplementedException();
                        }
                    }
                }
    
                dataGridView1.DataSource = lista.ToList();
            }
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   shanethehat    13 年前

    我的朋友 @danielpresser 给我一个 tip on twitter

            lista = lista.Where(Expression.Lambda<Func<Pessoa, bool>>(
                Expression.Equal(
                    propriedade,
                    Expression.Constant(Convert.ChangeType(textBox3.Text, propType.PropertyType))
                    ), param));