簡體   English   中英

如何使用LINQ對數據透視表進行分組

[英]How to group by a pivot table with LINQ

我是LINQ的新手,但是從我讀過的內容中查找我正在尋找的東西就像GroupBy - Simple 3 問題是我不想按一個小對象進行分組,我想分組並通過這些組分隔一個數據透視表(或直接創建它的查詢),如下所示:

數據透視表

查詢:(我正在使用Visual Studio 2012,查詢MS Access2010數據庫)

        try
        {
            l.Open();
            OleDbCommand cmd = l.CreateCommand();
            string transform = "TRANSFORM Max(Ultima_Calibracao) AS MaxUltimaCalib ";
            string select = "SELECT Codigo, B_DSC AS Artigo, Marca_ AS Marca, Modelo, N_Serie ";
            string from = "FROM APP_Equip_Ult_Prox_Calibracao ";
            string where = "WHERE YEAR(Ultima_Calibracao) = " + ano +
                " AND [Descrição Serviço] like '" + servico + "'   ";
            string groupby = "GROUP BY APP_Equip_Ult_Prox_Calibracao.Codigo, APP_Equip_Ult_Prox_Calibracao.B_DSC, " +
                "APP_Equip_Ult_Prox_Calibracao.Marca_, APP_Equip_Ult_Prox_Calibracao.Modelo, APP_Equip_Ult_Prox_Calibracao.N_Serie," +
                "Year(DateAdd('m',Val([frequência calibração]),[Ultima_Calibracao])) ";
            string pivot = "PIVOT Format(Ultima_Calibracao,'yyyy-mm') IN ( '" + ano + "-01','" + ano + "-02','" + ano + "-03','" + ano + "-04','" + ano + "-05','" +
                ano + "-06','" + ano + "-07','" + ano + "-08','" + ano + "-09','" + ano + "-10','" + ano + "-11','" + ano + "-12');";
            string query = transform + select + from + where + groupby + pivot;

            cmd = new OleDbCommand(query, l);

            dt = new DataTable();
            dt.Load(cmd.ExecuteReader());
            l.Close();

        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("DAO Exception: " + ex.Message);
            return null;
        }

試圖更好地解釋自己,我想轉向這樣的事情:

按部門分組的查詢結果:


| ID | 說明| 型號| 部門 - |

| 1 | Item1 ------- | Model1 | Department1 |

| 3 | Item3 ------- | Model1 | Department1 |

| 2 | Item2 ------- | Model1 | Department2 |

| 4 | Item4 ------- | Model1 | Department2 |

進入這樣的事情:

部門1

| ID | 說明| 型號|

| 1 | Item1 ------- | Model1 |

| 3 | Item3 ------- | Model1 |

部門2

| ID | 說明| 型號|

| 2 | Item2 ------- | Model1 |

| 4 | Item4 ------- | Model1 |

我不是100%肯定我會跟隨,但這是我嘗試回答的問題。 在這里,我在DataTable中構建一些輸入數據(這模仿了從查詢中獲得的內容),並使用一些LINQ將數據轉換為新的DataSet。 這回答了你的問題了嗎?

// create input data
var inputData = new DataTable();
inputData.Columns.Add("ID", typeof (int));
inputData.Columns.Add("Description", typeof (string));
inputData.Columns.Add("Model", typeof (string));
inputData.Columns.Add("Department", typeof (string));
inputData.Rows.Add(1, "Item1", "Model1", "Department1");
inputData.Rows.Add(2, "Item2", "Model1", "Department2");
inputData.Rows.Add(3, "Item3", "Model1", "Department1");
inputData.Rows.Add(4, "Item4", "Model1", "Department2");
inputData.AcceptChanges();

// create output data
var outputData = new DataSet();
outputData.Tables.AddRange(
    inputData.AsEnumerable()
             .GroupBy(row => row.Field<string>("Department"))
             .Select(rowGroup => {
                                     var departmentTable = inputData.Clone();
                                     departmentTable.TableName = rowGroup.Key;
                                     foreach (var row in rowGroup)
                                         departmentTable.Rows.Add(row.ItemArray);
                                     return departmentTable;
                                 })
             .ToArray());
outputData.AcceptChanges();

暫無
暫無

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

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