12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Linq.Expressions;
- using System.Numerics;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- namespace Ropin.Core.Common
- {
- public static class EnumerableHelper
- {
- public static DataTable ToPivotTable<T, TColumn, TRow, TData>(this IEnumerable<T> source, Func<T, TColumn> columnSelector, Expression<Func<T, TRow>> rowSelector, Func<IEnumerable<T>, TData> dataSelector)
- {
- DataTable table = new DataTable();
- var rowName = ((MemberExpression)rowSelector.Body).Member.Name;
- table.Columns.Add(new DataColumn(rowName));
- var columns = source.Select(columnSelector).Distinct();
- foreach (var column in columns)
- {
- table.Columns.Add(new DataColumn(column.ToString()));
- }
- var rows = source.GroupBy(rowSelector.Compile())
- .Select(rowGroup => new
- {
- Key = rowGroup.Key,
- Values = columns.GroupJoin(
- rowGroup,
- c => c,
- r => columnSelector(r),
- (c, columnGroup) => dataSelector(columnGroup))
- });
- foreach (var row in rows)
- {
- var dataRow = table.NewRow();
- var items = row.Values.Cast<object>().ToList();
- items.Insert(0, row.Key);
- //List<object> list = new List<object>();
- //foreach (var vals in items)
- //{
- // var va = GetValues(vals.ToString());
- // list.Add(va);
- //}
- dataRow.ItemArray = items.ToArray();
- table.Rows.Add(dataRow);
- }
- return table;
- }
- public static string GetValues(string value)
- {
- //bool isInteger = Regex.IsMatch(value, @"^\d+$");
- bool isDecimal = Regex.IsMatch(value, @"^\d+(\.\d+)?$");
- bool bol = true;
- if (isDecimal)
- {
- var spl= value.Split('.');
- if (spl.Count()>=2&&value.Split('.')?[1].Length > 3)
- {
- bol = false;
- }
- }
- if (bol) { return value; }
- else { return Convert.ToDecimal(value).ToString("F3"); }
- }
- }
- }
|