簡體   English   中英

從數據表對數據透視表進行動態Linq查詢

[英]Dynamic Linq Query from Datatable for Pivot Table

我已經為這個問題苦苦掙扎了一段時間,想知道是否能得到一些幫助。

我有以下物品:

Datatable inputdata = //Data from large scale SQL query
var rowvals = (from x in reportattrs.AsEnumerable()
                       where x.Field<long>("COLFORREPORT") == 0 && x.Field<long>("VALUEFIELD") == 0
                       orderby x.Field<long>("ORDERDISPLAY")
                       select new { Name = x.Field<object>("FIELDNAME") });
var colvals = (from x in reportattrs.AsEnumerable()
                       where x.Field<long>("COLFORREPORT") == 1 && x.Field<long>("VALUEFIELD") == 0
                       orderby x.Field<long>("ORDERDISPLAY")
                       select new { Name = x.Field<object>("FIELDNAME") });
var datavals = (from x in reportattrs.AsEnumerable()
                        where x.Field<long>("COLFORREPORT") == 1 && x.Field<long>("VALUEFIELD") == 1
                        orderby x.Field<long>("ORDERDISPLAY")
                        select new { Name = x.Field<object>("FIELDNAME") });

Rowvals是我們要在行中過濾的表的屬性,colvals是數據透視表的列值,datavals是數據總和

我要做的是創建自己的自定義數據透視表例程,該例程使我可以使用更復雜的方法進行過濾和分層。

我能夠獲得一行的特定不同值:

foreach(object val in rowvals){
var distinctValues = dsValues.AsEnumerable()
                            .Select(row => new {
                                attribute1_name = row.Field<string>(val)
                             })
                            .Distinct();
}

我很難篩選出組合中的每個值(對於可變數量的行和列)。 不僅如此,我還需要為每個值列選擇所有值,以便可以按照自己認為合適的方式對其進行匯總。

任何幫助將是極大的!

謝謝喬恩

尚不清楚您的輸入數據是什么樣子; 因為您要構建數據透視表,所以我假設它可以像這樣以數據集的形式呈現(如果沒有,則應將其轉換為數據透視表操作可接受的表格視圖):

col1 | col2 | val1 
-------------------
 C1  |  R1  |  1 
 C1  |  R2  |  2
 C1  |  R1  |  3
 C2  |  R1  |  4

所需的數據透視表就是這樣(讓數據透視表列使用'col1'值,對行使用'col2'值,對值使用val1的SUM):

     |  C1  |  C2 
-----------------
 R1  |  4   |  4
 R2  |  2   |  0 (or empty)

這樣的數據透視表數據可以通過NReco PivotData庫輕松地計算,只需幾行代碼(免責聲明:我是該庫的作者):

// group and calculate measures
var pivotData = new PivotData(
    new string[] {"col1","col2"},
    new SumAggregatorFactory("val1"),
    new DataTableReader(t) );
// get pivot table model for accessing columns/rows/values in easy way
var pivotTable = new PivotTable(
    new []{"col2"}, // row dimension(s)
    new []{"col1"}, // column dimension(s)
    pivotData );

var rowLabels = pivotTable.RowKeys;
var colLabels = pivotTable.ColumKeys;
var cellValue = pivotTable[0, 0].Value; // R1 + C1: 4
var grandTotal = pivotTable[null,null].Value; // 10

您還可以為行/列指定幾列,並可以計算幾項度量。 如果有不清楚的地方,請隨時與我聯系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM