请教:如何使用变量作为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中使用变量作为字段名称,请教一下如何做到?
...全文
9500 2 打赏 收藏 转发到动态 举报
写回复
用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# 听说过。是不是你那里还有“使用变量作为类型名称、代码名称”的想法?
「LLM那些事」系列第 4 篇《上下文窗口的边界》,文章连接:https://blog.csdn.net/houwenjin/article/details/163999753。 演示什么:在「预测」Sheet 的黄色格子里输入一句话(默认「来泡一杯」),四个「模型」——分别只统计最后 1 / 2 / 3 / 4 个字的 n-gram 查表——同时预测下一个字。同一个输入,看的上下文越长,候选越少、预测越确定: ┌────────────────┬──────────┬───────────────┬──────┐ │ 只看最后几个字 │ 用的前缀 │ 候选下一字数 │ 预测 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 1 个 │ 杯 │ 3(茶/子/水) │ 模糊 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 2 个 │ 一杯 │ 2(茶/水) │ 收窄 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 3 个 │ 泡一杯 │ 1(茶) │ 确定 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 4 个 │ 来泡一杯 │ 1(茶) │ 确定 │ └────────────────┴──────────┴───────────────┴──────┘

8,492

社区成员

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

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