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;
}