簡體   English   中英

C#Linq查詢-Groupby

[英]C# Linq Query - Groupby

我有一個數據表,可以保存這樣的數據:

Date OperationA OperationB OperationC

Today    5
Today               6
Today                          7

現在,我希望它看起來像:

Date OperationA OperationB OperationC

Today    5          6          7

我看過LINQ Group by子句,但這似乎將正在分組的數據分開,並且沒有將其保留在集合中-盡管作為LINQ新手,我可能會遺漏一些東西。

有人可以建議。

謝謝。

class Operation
{
    public DateTime Date { get; set; }
    public int OperationA { get; set; }
    public int OperationB { get; set; }
    public int OperationC { get; set; }
}

var operations = LoadData();
var result = operations.GroupBy(o => o.Date)
                   .Select(g => new Operation
                    {
                        Date = g.Key,
                        OperationA = g.Sum(o => o.OperationA),
                        OperationB = g.Sum(o => o.OperationB),
                        OperationC = g.Sum(o => o.OperationC)
                    });

PS:您的DB設計看起來很奇怪。 我認為表格應如下所示:

Date       Operation     Type
2010-1-1      5           A
2010-1-1      6           B
2010-1-1      7           C

LINQ 項目 -即,它根據輸入序列生成一個新序列。 換句話說,它始終是只讀的,從不寫入,從不修改原始序列,也沒有副作用。

其次, GroupBy產生一個IGrouping ,這是IEnumerable<T>一種特殊類型,具有一個稱為Key的額外屬性-這是這些項目共有的唯一值,並按其分組。

因此,在您的情況下,GroupBy將通過按日期對行進行聚類來創建一個稍微接近最終目標的數據結構:

var operationClusters = myDataTable.Rows.OfType<DataRow>().GroupBy(row => row["Date"]);

但是,您仍然需要提供將這些值折疊為一行的邏輯-例如, 5是所需值,而OperationA列的值不是null

暫無
暫無

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

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