首页 新闻 会员 周边

c#DataTable取值

0
悬赏园豆:50 [已解决问题] 解决于 2021-12-02 17:12

根据一个列值 取去该行值

如: ID NAME AGE
2 3 4
5 6 7

根据2 取出来 234

根据5 取出来567

用了Select 取出来还是这个整表

Linq 也没办法

-·--·-

麻烦大家了 谢谢

C#
园友2288976的主页 园友2288976 | 初学一级 | 园豆:12
提问于:2021-12-02 14:08

你题是不是写错了 “根据一个列值 取去该行值” “根据5 取出来456”

2年前

@韆: 嗯 写错了 不好意思

很OKResult 2年前
< >
分享
最佳答案
0

Select是投影,查询要用Where,不过Where查询返回的是多条数据,建议是使用实体类容器,比较DataTable方便多了,DataTable取值要进行拆箱转换,即麻烦还浪费性能

        static void Start() {
            var dt = StructTable();
            var ids = dt.AsEnumerable().Select(p => p["ID"]).ToArray();  //将表中的所有ID投影到一个数组中,不能用来查询
            //先将DataTable转成Enumerable,然后通过Where查询符合条件的DataRow,最后再枚举结果
            foreach (var dr in dt.AsEnumerable().Where(p => Convert.ToInt32(p["ID"]) == 2)) {
                //每次枚举的是DataTable的DataRow,即数据表中的数据行,通过列名就能获取行中的数据
                int id = Convert.ToInt32(dr["ID"]);
                string name = dr["Name"].ToString();
                int age = Convert.ToInt32(dr["Age"]);
            }
        }
        static DataTable StructTable() {
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("ID", typeof(int)));
            dt.Columns.Add(new DataColumn("Name", typeof(string)));
            dt.Columns.Add(new DataColumn("Age", typeof(int)));
            DataRow dr1 = dt.NewRow();
            dr1["ID"] = 2;
            dr1["Name"] = "3";
            dr1["Age"] = 4;
            DataRow dr2 = dt.NewRow();
            dr2["ID"] = 5;
            dr2["Name"] = "6";
            dr2["Age"] = 7;
            dt.Rows.Add(dr1);
            dt.Rows.Add(dr2);
            return dt;
        }

    }
收获园豆:50
WmW | 菜鸟二级 |园豆:424 | 2021-12-02 16:25

感谢 谢谢

园友2288976 | 园豆:12 (初学一级) | 2021-12-02 17:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册