[英]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.