本帖最后由 tearers 于 2012-09-08 01:04:56 编辑

解决方案 »

  1.   

    取变量名类名之类的功能就是反射了,你不用反射是做不到的,设计反射机制的目的最初也就是为了取得变量名和类名之类的,你应该用反射,实体类的属性和字段名一一对应,这样你可以用反射来取得所有实体类的属性,然后生成sql语句,不过你没必要自己实现,还不如用hibernate之类的框架,或者用linq,
      

  2.   

    我想到办法了,变通一下,虽然繁琐了点,但是比定义常量看着爽多了在传对象生成sql的时候,需要类似 order by的列名的时候,我还是传user.userName好了,
    不过我需要我在方法里面进行一次二次反射,不过不知道这样会不会有性能问题,
    这样至少不需要我把所有的列的名称,都定义成常量放在实体类里作为条件传参。
      

  3.   

    因为我的实体类的属性本身就有一层的attribute,所以我真不想在定义一堆常量,用来做条件传参。
      

  4.   

    反射都是取不到的。反射能取到的只有接口的名字,比如类名、方法名等等,局部变量名我说了多次,在编译后根本就不存在了,目标代码中没有了,怎么取到?你可以用UltraEdit打开一个编译好的exe文件或者dll文件。你可以看到里面有一些字符串一样的东西,比如ConsoleApplication1 Main Class1之类的,但是你定义的局部变量strName intValue之类的根本就没有了。
      

  5.   

    实际上用一个字典就解决你的问题了。
    事实上.NET框架库自己就是这么用的,比如说Control的Name属性,作为Controls集合的索引。 Dictionary<string, object> Vars = new Dictionary<string, object>();
    Vars.Add("userName", userName);
    Vars.Add("user", user);
    ...
    sql = "select * from table where id=3 order by " + Vars["UserName"].ToString();