var item = ad.Table.where(s=>s.userID == userID).FirstOrDefault();
item.userMoney = item.userMoney + 1;
db..SubmitChanges();
我想把userMoney这个属性 用一个变量来代替 该怎么写?
说了半天,就是反射就行了。
用法差不多是这样的
PropertyHelper.SetValue(Item, "UserMoney", newValue)
至于这个PropertyHelper或是ReflectionHelper你网上搜索一下反射 C#,应该能找到一筐。
OK 我看一下 谢谢了
反射出的结果 是以键值对的形式呈现的么? 还是必须要映射一个类勒
@流星霜紫:
MyClass obj = new MyClass(); Type t = typeof(MyClass); //循环赋值 int i = 0; foreach (var item in t.GetProperties()) { item.SetValue(obj, i, null); i += 1; } //单独赋值 t.GetProperty("five").SetValue(obj, 11111111, null); //循环获取 StringBuilder sb = new StringBuilder(); foreach (var item in t.GetProperties()) { sb.Append("类型:" + item.PropertyType.FullName + " 属性名:" + item.Name + " 值:" + item.GetValue(obj, null) + "<br />"); } //单独取值 int five = Convert.ToInt32(t.GetProperty("five").GetValue(obj, null)); sb.Append("单独取five的值:" + five); string result = sb.ToString(); Response.Write(result);
你自己搜索下吧,这个话题很多的。上面这个代码虽然足够烂,不过说明了事情。
自己找下或是封装一个Reflectionhelper。
或者学习一下微软的System.Reflection这个命名空间里面的相关对象方法。
@爱编程的大叔: 谢谢 学习 学习
声明 var xxx=item.userMoney; 不就好咯?
var xxx=item.userMoney; 这是啥意思?
因为item. 某个属性 我是动态的 我不清楚是哪一个, 所以想用变量。 只是不知道怎么写 或者可以这样写吗
@irfanchen:
隐式类型 var 变量名 = item.userMoney; 你的 item.userMoney 值 不就存进去了么?
你item.userMoney 是什么类型 var 的变量赋值后 他就是什么类型。
@流星霜紫: 不是。。。 比如有item.A , item.B , item.C这三个属性。 我根据前面的判断,可能只改变这三个中的一个属性的值。 所以具体是item.?我不知道。 所以想把A,B,C三个属性 用一个变量代替。
@irfanchen: 理论上 var item = ad.Table.where(s=>s.userID == userID).FirstOrDefault(); 你的这种写法 itme 的类型 就是你数据库那张表的类型 你item打点 出来的属性 就是对应你数据库的属性 如果想代替的话 或者你直接给他 换一个你想要的对象模型 比如说item 有a,b,c 三种属性
你定义一个类 就name,age,sex 三个属性 然后一一赋值 即可 因为你.FirstOrDefault(); 所以查询出来的是单个值 赋值起来也很方便的
@流星霜紫: 不是赋值的问题,是不知道给哪个属性赋值。所以想把属性改成变量。比如string aaa= "name", 那么我就 item.name 如果string aaa= "age", 那么我就 item.age 明白我的意思了吧?
@irfanchen: 你的意思是 你每次查询出来的 结果集 是不同的 有的是a,b,c 三个属性 有的是d,e,f三个属性 对么? 如果是的话 你需要用到反射了 把这个类用代码反射出来 从而知道他的属性
@流星霜紫: 不是。。。 假如我这个表有三个属性A、B、C, 我前面有判断。比如int mark; mark = 1的时候我就修改 A这个属性。 那就item.A = item.A+1; 如果是mark=2的话。那么我就只修改item.B这个属性。也就是item.B = item.B + 1; 等等。。 因为我的mark这个有很多种可能,我只修改对应的那个属性。所以我想写一个switch,然后把修改的对应属性用变量代替。这样简洁些。其实我写10个if,else 就可以解决了。
@irfanchen: ad.Table 是什么类型 可以告诉我下么?
@流星霜紫: table是表名字啊 不是字段 表还有类型?
@irfanchen: 我描述不清晰了 可能是。 table 在数据库中 是一张表的名字 在C# 中 是一个类 用来映射数据库 table数据的载体。
你描述的方式 目测 必须要用判断了 如果你愿意多花一点时间的话 你可以写一个方法 以后遇到这个问题 全部可以这么解决。
public void xxx(string key) {
var item = ad.Table.where(s=>s.userID == userID).ToDictionary(x=>x,xx=>xx);
item.userMoney = item[key] + 1;
db..SubmitChanges();
}
@流星霜紫: 我只是给你个思路,具体根据你的需求来调整,另外 + 的时候要确保类型一致
@Y2zz: 高人 0.0 膜拜哇 linq的很多方法 我都不晓得做啥的 =。= 好桑心
简单点实现,可以给实体实现一个索引器。否则的话,就需要动态生成表达式树了。