首页 > 其他分享 >行列旋转 Pivot

行列旋转 Pivot

时间:2024-09-04 17:38:55浏览次数:6  
标签:ItemID CodeItemsRule RuleID 旋转 行列 CodeID new var Pivot

原文: https://stackoverflow.com/questions/37250446/how-to-pivot-data-in-linq-without-hard-coding-columns

例子如下:

 文中给出的解决方案

public static class PivotClass
{
    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);
            dataRow.ItemArray = items.ToArray();
            table.Rows.Add(dataRow);
        }

        return table;
    }
}

  

List<CodeItemsRule> _CodeItemRules = new List<CodeItemsRule>()
{
    new CodeItemsRule()
    {
        CodeID="00009",
        ItemID="D1",
        RuleID=2
    },new CodeItemsRule()
    {
        CodeID="00009",
        ItemID="D2",
        RuleID=2
    },new CodeItemsRule()
    {
        CodeID="00009",
        ItemID="D3",
        RuleID=1
    },new CodeItemsRule()
    {
        CodeID="00008",
        ItemID="D1",
        RuleID=3
    },new CodeItemsRule()
    {
        CodeID="00007",
        ItemID="D3",
        RuleID=1
    },new CodeItemsRule()
    {
        CodeID="00007",
        ItemID="D4",
        RuleID=1
    },new CodeItemsRule()
    {
        CodeID="00010",
        ItemID="D3",
        RuleID=2
    },new CodeItemsRule()
    {
        CodeID="00010",
        ItemID="D1",
        RuleID=1
    },new CodeItemsRule()
    {
        CodeID="00010",
        ItemID="D2",
        RuleID=1
    }

};
var pivotTable = _CodeItemRules.ToPivotTable(
    item => item.ItemID,
    item => item.CodeID,
    items => items.Any() ? items.Sum(x => x.RuleID) : 0);

 

标签:ItemID,CodeItemsRule,RuleID,旋转,行列,CodeID,new,var,Pivot
From: https://www.cnblogs.com/keeplearningandsharing/p/18397015

相关文章

  • 机械臂运动学-旋转矩阵
    Rotationmatrix的三种用法:1.描述一个坐标系(相对于另一个坐标系)的姿态2.将某一点由某一个坐标系转换到另一个和此坐标系有相对运动的坐标系来表示3.将某一点在同一个坐标系中进行转动 以对三个主轴旋转的矩阵为基础:固定轴旋转:转动顺序不一样,旋转矩阵也不一样:......
  • 主辅助服务市场出清模型研究【旋转备用】(Matlab代码实现)
     ......
  • 主辅助服务市场出清模型研究【旋转备用】(Matlab代码实现)
     ......
  • 主辅助服务市场出清模型研究【旋转备用】(Matlab代码实现)
     ......
  • 主辅助服务市场出清模型研究【旋转备用】(Matlab代码实现)
     ......
  • 抖音旋转验证码角度识别方案
     一、简介上图是抖音最新的旋转验证码,和老款旋转验证码相比,现在新增了很多防御措施,比如内圈小图增加了白色花边,内外圈图片颜色有一定差异等等。所以给我们识别增加了很大难度。二、免费识别方法介绍经过我们大量的数据标注,我们终于完成了这款验证码的角度识别。我们可以完......
  • 抖音旋转验证码角度识别方案
      一、简介上图是抖音最新的旋转验证码,和老款旋转验证码相比,现在新增了很多防御措施,比如内圈小图增加了白色花边,内外圈图片颜色有一定差异等等。所以给我们识别增加了很大难度。二、免费识别方法介绍经过我们大量的数据标注,我们终于完成了这款验证码的角度识别。我们可以......
  • day-46 旋转图像
    思路不能使用辅助数组,所以关键在于弄清楚旋转后坐标的变化规律。当矩阵的大小n为偶数时,以n/2行和n/2列的元素为起点,当矩阵的大小n为奇数时,以n/2行和(n+1)/2列的元素为起点解题过程关键:旋转过程中互相交换的四个元素的坐标为:1.matrix[i][j]2.matrix[n-1-j][i]3.matr......
  • 前端css网格布局----行列属性
     固定值方式尽量撑满宽和高三行三列grid-template-rows:200px200px200px;grid-template-columns:200px200px200px;百分比方式四行四列 grid-template-rows:25%25%25%25%;grid-template-columns:25%25%25%25%;repeat(重复几次,数值) 3行3列  g......
  • 《高等代数》范德蒙德行列式的证明
    说明:此文章用于本人复习巩固,如果也能帮助到大家那就更加有意义了。注:1)利用数学归纳法证明范德蒙德行列式。    2)将范德蒙德行列式最后一列除了“1”以外都化为“0”,再按照最后一列展开。   3)为了与题目所证的公式靠拢,将连乘里面的两个x位置调换,使得用下标大的x......