首页 新闻 会员 周边

【求证,求解脱】取变量,对象的名称,不知道可否实现

0
悬赏园豆:30 [已解决问题] 解决于 2012-11-04 01:33

1.我现在有 字符串对象 string userName="Tearer";
问:我要怎么才能取到我定义的字符串变量的名字,而不是值,也就是userName这个
2.我现在有 Users user=new Users(); 对象
问:我怎么才能取到我定义的对象的名字,也就是Users这个

前提是不用反射,不遍历。

我的用处大概就是拼接SQL语句的时候,我不希望用字符串值写死,而是拿实体类的属性的名称直接拼接到SQL里。

"select * from table where id=3 order by "+取名(userName)

 我不确定能否做到,所以求解脱。我真心不想在这个实体类为每一个字段定义常量来达到目的

谢谢!

黄靖洆的主页 黄靖洆 | 初学一级 | 园豆:179
提问于:2012-09-08 01:00
< >
分享
最佳答案
0

你可以用hashtable了

Hashtable paramHash = new Hashtable();
paramHash.Add("userName", "Tearer");

然后做一个拼接的方法

StringBuilder sb = new StringBuilder();
            sb.Append("select * from table");

            if (paramHash != null && paramHash.Count != 0)
            {
                foreach (string key in paramHash.Keys)
                {
                    object item = paramHash[key];
                    //这个地方进行拼接
                }
           }
收获园豆:20
田林九村 | 老鸟四级 |园豆:2367 | 2012-09-08 08:58

你这样做的话 ,

paramHash[key] 取到的还是值 也就是  Tearer

我本意是取 userName 我的字符串需要的是 这个列的列名,而不是列值
黄靖洆 | 园豆:179 (初学一级) | 2012-09-08 11:47

@聪明的傻瓜: 我要怎么才能取到我定义的字符串变量的名字,而不是值,也就是userName这个

那个哈希表写的顺序错误了,应该是

Hashtable paramHash = new Hashtable();
paramHash.Add("Tearer","userName");
你在每定义一个变量前就把变量名字和类型加入哈希表,变量名字作为key 类型为value。
林J | 园豆:202 (菜鸟二级) | 2012-09-08 13:51
其他回答(4)
0

你太疯狂了,想法是好的,不过不用反射也不遍历,倒是有个投机的方法,不用VS去编译,自己弄个编译的工具,编译前将“取名(userName)”替换成"userName",然后再编译。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-08 12:05
0

目前想到的方法就是反射

chenping2008 | 园豆:9836 (大侠五级) | 2012-09-09 19:44
0

1. nHibernate

2. Reflection

3. see the above two

收获园豆:10
squallczj | 园豆:212 (菜鸟二级) | 2012-09-10 20:42
0

已找到方法,虽然不是很完美,我在尝试优化

public static string GetPropertyName<TSource>(Expression<Func<TSource, string>> property)
{
return ((MemberExpression)property.Body).Member.Name;
}

 

谢谢大家

黄靖洆 | 园豆:179 (初学一级) | 2012-11-04 01:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册