DataTable 转 匿名类 数组对象==>可进行Lamda表达式,Link表达式,会有属性的智能提示

由于项目不太适合使用EF ,使用了原生的 ADO.NET ,在得到DataTable 后大多数时候都是直接序列化为JSON格式字符串就返回前端了,在一些情况下,又需要对结果集做进一步的处理,

(EF中动态生成的实体类,也不能完全满足要求,随便一个联查得到的结果不在代码中处理还好,一旦需要在代码中在处理一遍,这个联查结果集结构的实体类你是加还是不加呢?) ===>其实实体类维护起来还是好烦的

想要 DataTable转换为 类似 List<T> 可进行 Lamda 表达式的操作和 Link表达式那就算完美了

Json.Net 中有一个 Jobject 的 类 一个类似动态 dynasmic 的东西,转换为这玩意,不爽,不能使用Lamada 和Link 没有智能提示 

在 Json.Net 中看到 一个函数 

 public static T DeserializeAnonymousType<T>(string value, T anonymousTypeObject);

通过 这个函数就可以得到 我想要的完美对象, 不过中间步骤就多了一步,需要先将 DataTable序列化为字符串 ,再反序列化得到 匿名对象 使用方法如下 :

  public void Test()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Age", Type.GetType("System.Int32"));
            dt.Columns.Add("Name", Type.GetType("System.String"));
            dt.Columns.Add("Sex", Type.GetType("System.String"));
            dt.Columns.Add("IsMarry", Type.GetType("System.Boolean"));
            for (int i = 0; i < 4; i++)
            {
                DataRow dr = dt.NewRow();
                dr["Age"] = i + 1;
                dr["Name"] = "Name" + i;
                dr["Sex"] = i % 2 == 0 ? "男" : "女";
                dr["IsMarry"] = i % 2 > 0 ? true : false;
                dt.Rows.Add(dr);
            }

            var strJson = JsonConvert.SerializeObject(dt);
            Console.WriteLine(strJson);
            var definition = new[] { new { Age = 1, Name = string.Empty, Sex = string.Empty, IsMarry = true } };
            var person1 = JsonConvert.DeserializeAnonymousType(strJson, definition);

            var womanList = from x in person1 where x.Sex == "女" select x;
            var littleList = person1.Where(x => x.Age == 1);

            Console.ReadKey();
        }

其实看得见,用匿名类替代了实体类,相比于新建一个实体类 还是要方便许多,维护起来的话,方法在哪,就去哪维护,感觉还是有一些进步的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值