c# – 在Pivot中包含更多行

c# – 在Pivot中包含更多行,第1张

概述我在下面的链接中使用扩展方法来转移我的数据: https://techbrij.com/pivot-c-array-datatable-convert-column-to-row-linq 我将链接中的代码包括在内,以防有人在将来发现此问题且链接已死: public static DataTable ToPivotTable<T, TColumn, TRow, TData>( this I 我在下面的链接中使用扩展方法来转移我的数据:
https://techbrij.com/pivot-c-array-datatable-convert-column-to-row-linq

我将链接中的代码包括在内,以防有人在将来发现此问题且链接已死:

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

参考链接中的示例,您将获得数据透视图;

var pivottable = data.topivottable(              item => item.Year,item => item.Product,items => items.Any() ? items.Sum(x=>x.Sales) : 0);

我的问题是,如何在此查询中包含更多行以返回例如ProductCode .. item => new {item.Product,item.ProductCode}不起作用..

============== EDIT / 2018年10月23日==============

假设我的数据是这样的;

借助上述代码,我可以设法做到这一点;

我想要实现的是这个(额外的col:STOCKID或任何其他cols);

解决方法 匿名类型不能作为通用参数传递.尝试将您的数据透视表键定义为结构:
public struct PivotKey{    public string Product;    public int ProductCode; // assuming your product codes are integers}

这样,您可以根据所有字段的相等和哈希代码利用struct的默认Equals和GetHashCode方法实现.

然后,定义rowSelector,如下所示:

item => new PivotKey { Product = item.Product,ProductCode = item.ProductCode}
总结

以上是内存溢出为你收集整理的c# – 在Pivot中包含更多行全部内容,希望文章能够帮你解决c# – 在Pivot中包含更多行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1243089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存