请教:如何使用变量作为LINQ的select new出来的字段名称?

tttmfc 2020-12-20 12:14:05
已知情况:
1、要处理的表有哪些列是未知的,所以不能把列名写死;
2、会将datatable的所有列放在combobox中,根据用户选择的列作出相应处理;
3、将处理好的结果放在新列,新列的列名是原选择修改的列名+“修改后”

所以不知如何实现以下效果:
例表一:
姓名 金额
张三 10
李四 15

例表二:
商品名 售价
风扇 60
冰箱 200

……还有很多完全不同的表作各种不同处理,比如对表一的金额统一加10,表二的售价统一乘0.8等等。

string 字段1=表二.columns[0].columnname;//或表一,或从界面取值,方法不定,总之是变量的意思
string 字段2=cbx目标列.SelectedItem.ToString();
string 字段3=字段2+"修改后";

var query = from p in dt.AsEnumerable()
select new
{
字段1 = p.Field<string>("商品名") + "abc", //"商品名"和"售价"不写成字段1、字段2是为了避免各位与左边的看混淆,
字段2 = p.Field<string>("售价"), //所以区分开写方便看清楚要表达的意思
字段3 = p.Field<string>("售价") * 0.8
};
//其它代码略

以上只是示例,与实际作用无关。总之目标就是在select new中使用变量作为字段名称,请教一下如何做到?
...全文
9320 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
在 c# 中,有多种字典方面的扩展类型。例如 ExpandoObject,它也就是 string 类型的字典 key,例如
dynamic x = new ExpandoObject();
x.a = 100;
x.b = "200";
var y = (IDictionary<string, object>)x;
var u = (int)y["x"];
var v = (string)y[b];

包括 Dictionary<string,T> 等等在内的类型都是可以要实现 IDictionary<string,T> 之类的功能。但是要知道这不叫做什么“做为字段名”,这是字典点,是最基本的数据结构。
  • 打赏
  • 举报
回复
你先写一个代码,定义一个 object 类型的变量,它引用一个“使用变量作为字段名称”的对象看看?这个概念从未在 c# 听说过。是不是你那里还有“使用变量作为类型名称、代码名称”的想法?

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧