zoukankan      html  css  js  c++  java
  • WCF返回匿名类型(整理自网络以总结备忘)

      在WCF的服务端,通常会有很多函数需要返回匿名类型的集合。
      之前一直在winform或web的类中返回object[]或是List<object>是OK的,但是在wcf里返回的时候会报错。
      试了几种方法,最终通过返回DataTable的方法解决了。
      首先,写个扩展方法用来转换IEnumberable类型的数据为DataTable。

    public static DataTable ConvertToDataTable<T>(this IEnumerable<T> array)
    {
    var ret
    = new DataTable();
    ret.TableName
    = typeof(T).Name.Replace(".", "_");//必须要设置该属性,否则会报错,同webservice返回datatable一样
    foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
    {
    //此处可以添加逻辑将nullable类型单独处理
    ret.Columns.Add(dp.Name, dp.PropertyType);
    }
    foreach (T item in array)
    {
    var Row
    = ret.NewRow();
    foreach (PropertyDescriptor dp in TypeDescriptor.GetProperties(typeof(T)))
    Row[dp.Name]
    = dp.GetValue(item);
    ret.Rows.Add(Row);
    }
    return ret;
    }


      其次,在服务端,查询出匿名类型后,调用上面的方法来进行转换,如下

    public DataTable GetClassInfo()
    {
    try
    {
    using (MyDbcontext entities = new MyDbcontext())
    {
    DataTable dt
    = (from c in entities.V_bookdefault
    orderby c.bookupdatetime descending
    select
    new { c.bookid, c.bookname, c.bookimagepath }).ToList().ConvertToDataTable();

    return dt;
    }
    }
    catch (Exception ex)
    {
    //do sth
    }
    }

      对于匿名类型中nullable属性情况,可以用两种方式解决:

        一、在ConvertToDataTable方法中将每种nullable特殊处理

          二、在匿名对象中将如DateTime? int? ,等类型转化
    总结自:http://hi.baidu.com/kanbafang/blog/item/3e708214f8803c04c83d6da1.html

  • 相关阅读:
    ElasticSearch集群设置
    NEST与JSON语法对照 一 match与multi_match
    某墙尼妹,用个Response.Filter来解决StackExchange.Exceptional中google cdn的问题
    高频
    Linux 后台执行命令
    Mysql 常用函数汇总
    Golang 昨天、今天和明天
    Golang——Cron 定时任务
    Golang 资料整理
    Golang: for range
  • 原文地址:https://www.cnblogs.com/yetiea/p/2072023.html
Copyright © 2011-2022 走看看