首页 新闻 会员 周边 捐助

有关Linq写法的问题

0
悬赏园豆:20 [已解决问题] 解决于 2016-03-10 10:42

var item = ad.Table.where(s=>s.userID == userID).FirstOrDefault();
item.userMoney = item.userMoney + 1;
db..SubmitChanges();


我想把userMoney这个属性  用一个变量来代替  该怎么写?

irfanchen的主页 irfanchen | 初学一级 | 园豆:100
提问于:2015-01-13 09:53
< >
分享
最佳答案
0

说了半天,就是反射就行了。

用法差不多是这样的

PropertyHelper.SetValue(Item, "UserMoney", newValue)

至于这个PropertyHelper或是ReflectionHelper你网上搜索一下反射 C#,应该能找到一筐。

收获园豆:5
爱编程的大叔 | 高人七级 |园豆:30844 | 2015-01-13 10:55

OK 我看一下  谢谢了

irfanchen | 园豆:100 (初学一级) | 2015-01-13 11:00

反射出的结果 是以键值对的形式呈现的么?  还是必须要映射一个类勒

流星霜紫 | 园豆:473 (菜鸟二级) | 2015-01-13 11:09

@流星霜紫: 

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这个命名空间里面的相关对象方法。

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-01-13 11:17

@爱编程的大叔:  谢谢 学习 学习

流星霜紫 | 园豆:473 (菜鸟二级) | 2015-01-13 11:18
其他回答(3)
0

声明  var xxx=item.userMoney; 不就好咯?

收获园豆:15
流星霜紫 | 园豆:473 (菜鸟二级) | 2015-01-13 10:07

 var xxx=item.userMoney;  这是啥意思?

因为item. 某个属性 我是动态的  我不清楚是哪一个, 所以想用变量。 只是不知道怎么写 或者可以这样写吗

支持(0) 反对(0) irfanchen | 园豆:100 (初学一级) | 2015-01-13 10:14

@irfanchen: 

隐式类型 var 变量名 = item.userMoney;   你的 item.userMoney  值 不就存进去了么?

你item.userMoney 是什么类型 var 的变量赋值后 他就是什么类型。 

支持(0) 反对(0) 流星霜紫 | 园豆:473 (菜鸟二级) | 2015-01-13 10:16

@流星霜紫: 不是。。。   比如有item.A , item.B , item.C这三个属性。  我根据前面的判断,可能只改变这三个中的一个属性的值。 所以具体是item.?我不知道。 所以想把A,B,C三个属性 用一个变量代替。

支持(0) 反对(0) irfanchen | 园豆:100 (初学一级) | 2015-01-13 10:21

@irfanchen:  理论上 var item = ad.Table.where(s=>s.userID == userID).FirstOrDefault(); 你的这种写法 itme 的类型 就是你数据库那张表的类型 你item打点 出来的属性 就是对应你数据库的属性 如果想代替的话 或者你直接给他 换一个你想要的对象模型  比如说item 有a,b,c 三种属性

你定义一个类 就name,age,sex 三个属性 然后一一赋值 即可 因为你.FirstOrDefault(); 所以查询出来的是单个值 赋值起来也很方便的

支持(0) 反对(0) 流星霜紫 | 园豆:473 (菜鸟二级) | 2015-01-13 10:25

@流星霜紫: 不是赋值的问题,是不知道给哪个属性赋值。所以想把属性改成变量。比如string aaa= "name", 那么我就 item.name 如果string aaa= "age", 那么我就 item.age 明白我的意思了吧?

支持(0) 反对(0) irfanchen | 园豆:100 (初学一级) | 2015-01-13 10:31

@irfanchen:  你的意思是 你每次查询出来的 结果集 是不同的 有的是a,b,c 三个属性 有的是d,e,f三个属性  对么? 如果是的话 你需要用到反射了 把这个类用代码反射出来 从而知道他的属性 

支持(0) 反对(0) 流星霜紫 | 园豆:473 (菜鸟二级) | 2015-01-13 10:34

@流星霜紫: 不是。。。   假如我这个表有三个属性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 就可以解决了。

支持(0) 反对(0) irfanchen | 园豆:100 (初学一级) | 2015-01-13 10:39

@irfanchen:   ad.Table 是什么类型 可以告诉我下么?

支持(0) 反对(0) 流星霜紫 | 园豆:473 (菜鸟二级) | 2015-01-13 10:50

@流星霜紫: table是表名字啊 不是字段 表还有类型?

支持(0) 反对(0) irfanchen | 园豆:100 (初学一级) | 2015-01-13 10:52

@irfanchen: 我描述不清晰了 可能是。  table 在数据库中 是一张表的名字 在C# 中 是一个类 用来映射数据库 table数据的载体。

你描述的方式 目测 必须要用判断了 如果你愿意多花一点时间的话 你可以写一个方法 以后遇到这个问题 全部可以这么解决。

支持(0) 反对(0) 流星霜紫 | 园豆:473 (菜鸟二级) | 2015-01-13 11:03
0

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 | 园豆:393 (菜鸟二级) | 2015-01-13 10:54

@流星霜紫: 我只是给你个思路,具体根据你的需求来调整,另外 + 的时候要确保类型一致

支持(0) 反对(0) Y2zz | 园豆:393 (菜鸟二级) | 2015-01-13 11:08

@Y2zz:  高人 0.0 膜拜哇  linq的很多方法 我都不晓得做啥的 =。= 好桑心

支持(0) 反对(0) 流星霜紫 | 园豆:473 (菜鸟二级) | 2015-01-13 11:09
0

简单点实现,可以给实体实现一个索引器。否则的话,就需要动态生成表达式树了。

幻天芒 | 园豆:37207 (高人七级) | 2015-01-13 11:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册