簡體   English   中英

使用LINQ進行分組和計數

[英]Group and Count using LINQ

我有一個sql db,每次設備損壞時,它都會創建一條記錄。 根據發生的情況,分配不同的FaultCode。

我想分組並計算存在FaultCode的次數。

  Example:
  FaultCode    Count
  1            6
  2            20

我已經編寫了大部分代碼,可以查詢數據庫並執行linq查詢。 但是,我只能返回計數的故障代碼列表。 但不是兩個。

這是代碼:

private static DataTable FaultCodeByCluster(DataTable referenceDt)
{
    DataTable output = new DataTable();

    foreach (DataColumn dtColum in (InternalDataCollectionBase)referenceDt.Columns)
        output.Columns.Add(new DataColumn(dtColum.ColumnName, dtColum.DataType));

    var query = from results in referenceDt.AsEnumerable()
        group results by new
        {
            FaultCode = results.Field<int>("FaultCode"),
        }
        into newFaultCodes
        orderby newFaultCodes.Key.FaultCode

        select newFaultCodes.Count();          <--- count of fault codes
        //select newFaultCodes.Key.FaultCode;  <--- list out fault codes by group

    foreach (var newFaultCodes in query)
    {
        Console.WriteLine("Value is {0}", newFaultCodes);   
    }

    return output;
}

我尚未對其進行測試,但是請嘗試將以下內容用作您的select語句:

select new { FaultCode = newFaultcodes.Key, Count = newFaultcodes.Count()};

使用Linq的另一種方法

添加程序集System.Data.DataSetExtensions ,可以將DataTable轉換為List

            var listOfFaultCode = dt1.Rows     
                                     .OfType<DataRow>()
                                     .Select(dr => dr.Field<int>("FaultCode")).ToList();

            var faultCodeGroupedByCount = listOfFaultCode.GroupBy(x => x);

            foreach (var item in faultCodeGroupedByCount)
            {
                Console.WriteLine("FaultCode:" + item.Key + " FaultCount:" + item.Count());
            }

暫無
暫無

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

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