繁体   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