zoukankan      html  css  js  c++  java
  • Linq实现DataTable的分组统计

    复制代码
    DataTable dt = GetTestData(10); //获取10条测试数据
    var queryByService = from r in dt.AsEnumerable()
    group r by r.Field
    <string>(4) into g
    select
    new
    {
    Service
    = g.Key,
    Bookings
    = g.Count(p => p.Field<string>(1) !=""),
    ConfirmedBookings
    = g.Count(p => p.Field<string>(1) =="Confirmed"),
    PendingBookings
    = g.Count(p => p.Field<string>(1) =="Pending"),
    CancelledBookings
    = g.Count(p => p.Field<string>(1) =="Cancelled")
    };
    var queryByClient
    = from r in dt.AsEnumerable()
    where r.Field<string>(1) =="Confirmed"
    group r by r.Field
    <string>(5) into g
    select
    new
    {
    BookingClient
    = g.Key,
    _20DV
    = g.Count(p => p.Field<string>(2)=="20DV"),
    _40DV
    = g.Count(p => p.Field<string>(2) =="40DV"),
    _40HC
    = g.Count(p => p.Field<string>(2) =="40HC"),
    Bookings
    = g.Count(),
    TotalOceanFreight
    = g.Sum(p => p.Field<decimal>(3)),
    AverageOceanFreight
    = g.Average(p => p.Field<decimal>(3))
    };
    var queryByType
    = from r in dt.AsEnumerable()
    group r by r.Field
    <string>(2) into g
    select
    new
    {
    EquipmentType
    = g.Key,
    Total
    = g.Count(),
    Confirmed
    = g.Count(p => p.Field<string>(1) =="Confirmed"),
    Pending
    = g.Count(p => p.Field<string>(1) =="Pending"),
    Cancelled
    = g.Count(p => p.Field<string>(1) =="Cancelled")
    };
    GridView1.DataSource
    = dt;
    GridView1.DataBind();
    GridView2.DataSource
    = queryByService;
    GridView2.DataBind();
    GridView3.DataSource
    = queryByClient;
    GridView3.DataBind();

    DataTable dtByType
    = ConvertToDataTable(queryByType);
    GridView4.DataSource
    = dtByType; //或 GridView4.DataSource = queryByType;
    GridView4.DataBind();
    复制代码

     
    另外ConvertToDataTable()是在网上看到的方法

    复制代码
    public DataTable ConvertToDataTable<T>(IEnumerable<T> varlist)
    {
    DataTable dtReturn
    =new DataTable();
    // column names
    PropertyInfo[] oProps =null;
    if (varlist ==null) return dtReturn;
    foreach (T rec in varlist)
    {
    // Use reflection to get property names, to create table, Only first time, others will follow
    if (oProps ==null)
    {
    oProps
    = ((Type)rec.GetType()).GetProperties();
    foreach (PropertyInfo pi in oProps)
    {
    Type colType
    = pi.PropertyType;
    if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() ==typeof(Nullable<>)))
    {
    colType
    = colType.GetGenericArguments()[0];
    }
    dtReturn.Columns.Add(
    new DataColumn(pi.Name, colType));
    }
    }
    DataRow dr
    = dtReturn.NewRow();
    foreach (PropertyInfo pi in oProps)
    {
    dr[pi.Name]
    = pi.GetValue(rec, null) ==null? DBNull.Value : pi.GetValue
    (rec,
    null);
    }
    dtReturn.Rows.Add(dr);
    }
    return dtReturn;
    }
    复制代码
  • 相关阅读:
    zend studio常见问题解答
    瀑布流插件(jquery.masonry.js)
    仿jQuery中undelegate()方法功能的函数
    Linux 常用命令
    linux debugfs 找回rm 的文件
    jq 添加和移除样式
    CentOS 搭建 nginx python django web server
    Linux vim 配置文件
    CentOS 安装python 3.3.2
    login.defs和shadow文件区别
  • 原文地址:https://www.cnblogs.com/lanyue52011/p/3289408.html
Copyright © 2011-2022 走看看